nvarchar不是一个被认可的游标选项。

21

我正在运行一些SQL语句,从临时表中提取信息并将其放入永久表中。我是在三年前编写的一份逐步指南中找到的这些SQL语句,而编写它的人早已经离开了。

它指出要使用这里的SQL语句。

declare @Password nvarchar(100); 
set @Password ='rewards';
if not exists(select 1 from sys.openkeys where key_name = 'Sym_UserPassData' 
and database_name = db_name())  OPEN SYMMETRIC KEY Sym_UserPassData DECRYPTION BY
CERTIFICATE UserPassTables with password='asbpass71509new';
INSERT INTO [User] (Username, [Password], AllowChange, ForceChange, FullName,
SalesRep, OpenLink, UserProfileID, LastUpdatedBy,UserEmail) 
(SELECT Username,EncryptByKey(Key_GUID('Sym_UserPassData'),@Password), 
AllowChange, ForceChange, FullName, SalesRep, [OpenLink ], UserProfileID,    
LastUpdateBy, UserEmail FROM TempUsers)

然后接着它说:

如果每一行的密码都是唯一的,则去掉集合@Password = 'Password'; 并将@Password替换为[Password]。

所以起初我只是改变了第二行,使其变成

declare @Password nvarchar(100);
set [Password]
...

但是这样会因为密码列而导致错误,所以我将其更改为:

declare [Password] nvarchar(100); 
set [Password]
if not exists(select 1 from sys.openkeys where key_name = 'Sym_UserPassData' 
and database_name = db_name())  OPEN SYMMETRIC KEY Sym_UserPassData DECRYPTION BY
CERTIFICATE UserPassTables with password='asbpass71509new';
INSERT INTO [User] (Username, [Password], AllowChange, ForceChange, FullName,
SalesRep, OpenLink, UserProfileID, LastUpdatedBy,UserEmail) 
(SELECT Username,EncryptByKey(Key_GUID('Sym_UserPassData'),[Password]), 
AllowChange, ForceChange, FullName, SalesRep, [OpenLink ], UserProfileID,    
LastUpdateBy, UserEmail FROM TempUsers)

这就是导致我出错的原因:

 nvarchar is not a recognized cursor option 

有人知道我错过了什么吗?如果我可以提供任何其他信息,我会尽力而为。

感谢任何能够帮助我的人。


1
请勿更改声明行,删除设置行。 - Laurence
2个回答

42

1
当我在本地变量声明时忘记使用@符号时,我遇到了类似的错误。请在本地变量前面加上@符号进行声明,如:Declare @local_variable_name。 - Kyung Hwan Min

2
如果[Password]是TempUsers中的一个列,那么它可能意味着这个。
if not exists(select 1 from sys.openkeys where key_name = 'Sym_UserPassData' 
and database_name = db_name())  OPEN SYMMETRIC KEY Sym_UserPassData DECRYPTION BY
CERTIFICATE UserPassTables with password='asbpass71509new';
INSERT INTO [User] (Username, [Password], AllowChange, ForceChange, FullName,
SalesRep, OpenLink, UserProfileID, LastUpdatedBy,UserEmail) 
(SELECT Username,EncryptByKey(Key_GUID('Sym_UserPassData'),[Password]), 
AllowChange, ForceChange, FullName, SalesRep, [OpenLink ], UserProfileID,    
LastUpdateBy, UserEmail FROM TempUsers)

这也是我理解的方式。 - Tony Hopkinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接