我一直在尝试使用游标和子字符串函数修改临时表中的数据。当我通过选择执行所有单独的步骤时,一切正常,但是只要我将它们放在一起并启动它就会给出错误消息:必须声明标量变量“@ tempvar1”。这些似乎不是两个或更多批次,我无法弄清楚它为什么不起作用。
declare @temptabulka table
(
ID_Studenta uniqueidentifier,
NAME varchar(120)
)
Insert into @temptabulka (ID_Studenta, NAME) SELECT ID_Studenta,NAME FROM STUDENTS
DECLARE @tempvarA varchar(120)
DECLARE @tampvar1 varchar(120)
DECLARE prvykurzor CURSOR FOR
SELECT NAME
FROM @temptabulka
OPEN prvykurzor
FETCH NEXT FROM prvykurzor INTO @tempvar1
WHILE @@FETCH_STATUS = 0
BEGIN
SET @tempvarA = @tampvar1
SET @tempvarA = substring(@tempvarA,0,
CASE
WHEN patindex('%_Nez. Priez %',@tempvarA)=0
THEN len(@tempvarA)+1
ELSE patindex('%_Nez. Priez %',@tempvarA)
END
)
UPDATE @temptabulka SET NAME = @tempvarA
WHERE NAME = @tampvar1
FETCH NEXT FROM prvykurzor INTO @tempvar1
END
CLOSE prvykurzor
DEALLOCATE prvy_cursor
答案 0 :(得分:2)
您已将变量声明为tampvar1
而非tempvar1
,并使用错误的名称。将所有tampvar1
替换为tempvar1
,您应该没问题。
此处:DECLARE @tampvar1 varchar(120)
此处:SET @tempvarA = @tampvar1
此处:WHERE NAME = @tampvar1