2013-01-10 136 views
0

我得到这个错误 Msg 102,Level 15,State 1,Procedure CostTest_02,Line 43 ';'附近语法不正确。SQL光标语法问题

以“GO”红色下划线我一直在寻找一段时间的错误,我找不到!我对游标不是很有经验(这是我写的第一本)如果任何人都可以发现它或任何其他错误,我会非常感谢

http://imgur.com/9k40O < -----图片是更多清晰(推荐)

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:  <Author,,Name> 
-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 
CREATE PROCEDURE CostTest_02 
AS 
BEGIN 

DECLARE @Issue_id int; 
DECLARE @Master_id int; 
DECLARE @Issue_table varchar(255); 
DECLARE @price real; 
DECLARE @rowcount bigint; 


DECLARE cost_cursor cursor FOR 
SELECT [Issue Id], [Master Id], [Issue Table], [Price] 
from Adhoc_datafix..[Issue Table] 
FOR UPDATE OF ADHOC_DATAFIX..[Issue Cost]; 

OPEN cost_cursor; 
FETCH NEXT FROM cost_cursor into @Issue_ID, @Master_id, @Issue_table, @Price 

WHILE @@FETCH_STATUS = 0 
BEGIN 

Select count(*) from @Issue_Table 
set @Rowcount = @@rowcount 

UPDATE ADHOC_DATAFIX..[Issue Cost] 
set [Issue Id] = @Issue_ID , 
[Master Issue Id] = @Master_ID , 
[Row Count] = (Select count(*) from @Issue_Table), [email protected], 
[Cost] = CAST(@Rowcount * @price as money) 

WHERE CURRENT OF cost_cursor; 
FETCH NEXT FROM cost_cursor 
END 

close cost_cursor; 

DEALLOCATE cost_cursor; 
GO 

回答

0

您的存储过程没有END语句。只需在GO

+0

是的,这实际上帮了很多,但我仍然不确定两种不同类型的FETCH,我肯定只需要一个FETCH ? – Callum

+0

您需要同时提取,但它们都应该是'从cost_cursor下一步获取@Issue_ID,@Master_id,@Issue_table,@ Price'。第一次获取获得第一个匹配的行并设置了初始的“fetch_status”,即是否找到了某个东西。在每次循环之后,再次调用fetch来尝试获取另一行并更新'fetch_status'。 – Rhumborl

+0

非常感谢!那就是我想要的只是需要确认 – Callum

1

我的猜测是附近的脚本的底部线 FETCH NEXT FROM cost_cursor应该 FETCH NEXT FROM cost_cursor into @Issue_ID, @Master_id, @Issue_table, @Price

对不起,在第二次看这条线:

Select count(*) from @Issue_Table 

没有意义,因为@Issue_table实际上不是一个表,这是一个nvarchar的。
在运行时,被转移到:

Select count(*) from 'Value of issue table field' 

其中,简单地说,不工作。 如果要从表中动态获取计数,请查看此seminal article

+0

之前加上我在我的代码中都不确定哪些是必需的? – Callum

+0

关于提取,它们都是必需的,因为sql服务器游标使用了[loop-and-a-half](http://www.cs.duke.edu/~ola/patterns/plopd/loops.html #loop-and-a-half) – SWeko

+0

啊好吧谢谢你会看那篇开创性的文章! – Callum