当我尝试在SQL Server 2005中执行此代码时收到错误消息:
Msg 156,Level 15,State 1,Line 20
关键字'close'附近的语法不正确。
Msg 102,Level 15,State 1,Line 21
'dbname'附近的语法不正确。
我的代码出了什么问题?
DECLARE @name nvarchar(max), @stat nvarchar(max)
set @stat = N'update DBNAME.dbo.Ad
set Label = ''Special Ad'' where Label =''AdXXXX'''
DECLARE dbname CURSOR FOR select name from sys.databases where name like '%config%'
open dbname
begin try
while 1=1
begin
fetch next from dbname into @name
set @stat=REPLACE(@stat,'DBNAME',@name)
exec sp_executesql @stat
end
end try
close dbname
deallocate dbname
答案 0 :(得分:2)
TRY
块后面必须紧跟CATCH
块:
BEGIN TRY
-- some statements here
END TRY
BEGIN CATCH
-- other statements here
END CATCH
答案 1 :(得分:1)
请使用以下sql cursor脚本
DECLARE @name nvarchar(max), @stat nvarchar(max)
DECLARE dbname CURSOR FOR select name from sys.databases --where name like '%config%'
open dbname
FETCH NEXT FROM dbname INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
set @stat = N'update DBNAME.dbo.Ad set Label = ''Special Ad'' where Label =''AdXXXX'''
set @stat=REPLACE(@stat,'DBNAME',@name)
exec sp_executesql @stat
FETCH NEXT FROM dbname INTO @name
END
close dbname
deallocate dbname
请注意,set @stat声明语句将移动到游标中 因为在第一次替换原始的@stat更改后,您将无法再次更改
答案 2 :(得分:0)
您有TRY
块而没有CATCH
块:
...
open dbname
begin try
while 1=1 begin
fetch next from dbname into @name
set @stat=REPLACE(@stat,'DBNAME',@name)
exec sp_executesql @stat
end
end try
begin catch
<..some error handling code>
end catch
...
请参阅TRY...CATCH