我需要使用游标来调用具有2个参数的存储过程,我需要将这些参数从“客户”表中传入。
这就是我的意思;
我的目标是将“客户”表中的所有“客户ID”和“客户名称”传递到名为AddCustomers的存储过程中,该存储过程具有“客户ID”和“客户名称”两个参数。即:AddCustomer [CustomerID],[CustomerName] [附带说明:此AddCustomer存储过程对我的应用程序进行了一些过滤操作]
因此,将此CURSOR与存储过程一起使用的最终结果是将“客户”表中的所有customerID和CustomerName都转储/通过到AddCustomer存储过程中。
我已经使用过sp_executesql,但是没有成功。
这是我尝试过但无法正常工作的内容。
Declare @CustomerID int Declare @CustomerName varchar(100) Declare cur CURSOR READ_ONLY FOR SELECT CustomerID, CustomerName from Customers OPEN cur FETCH NEXT FROM cur INTO @CustomerID, @CustomerName WHILE @@FETCH_STATUS = 0 BEGIN EXEC AddCustomer @CustomerID, @CustomerName FETCH NEXT FROM cur INTO @CustomerID, @CustomerName END CLOSE cur DEALLOCATE cur
我是游标使用的新手,所以我不确定为什么它不起作用。如果您可以提供任何线索或链接,我们将不胜感激。
好的,如果Cursor无法通过存储过程循环,那么任何人都可以提供解决方案或提示我的问题,即将所有来自Customer表的CustomerID和CustomerName传递到我的AddCustomer存储过程中,以便我可以对每个我传递给AddCustomer存储过程的CustomerID和CustomerName。
山姆
有时,使用存储过程执行这样的任务 非常合适。 勒·多菲尔(Le Dorfier)当然给了我很多很好的建议,但是在这一点上我不得不与他不同意。特别是如果这是一次记录处理以实现某种形式的转换,那么您 真的很 接近您的解决方案,因为我看不到您的代码中有任何明显的缺陷。顺便说一句,我已经多次使用相同的方法,并且效果很好。
因此…发布存储过程,我们将看看是否有帮助。另外,您看到什么具体错误?
更新: 等一下,您只是在SQL窗口中运行它吗?我通常将这些东西打包到另一个存储过程中(通常只是一个临时过程),然后运行它。当然,也可能只是您需要执行此代码- 不是使用EXEC,而是使用Execute按钮…根据您的描述很难分辨。
更新2: 您在上面说错误是关于表的问题。您确定所定义的数据类型正确吗?该错误可能是从表中提取的数据与您要放置的var类型之间的不匹配吗?