我正在运行一些从临时表中获取信息的sql,并将其放入永久表中.我从3年前的一步一步的指导中得到它,写的人已经很久了.
它声明在这里使用这个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),[OpenLink ],LastUpdateBy,UserEmail FROM TempUsers)
之后,它说下面
如果密码对于每一行都是唯一的,请采用set @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]),UserEmail FROM TempUsers)
那是什么给了我错误:
nvarchar is not a recognized cursor option
有人知道我失踪了吗?如果我可以提供任何其他信息,我会尽力做到这一点.
谢谢任何能够帮忙的人.
解决方法
你必须在名字之前用@符号声明变量.所以这是正确的:
declare @Password nvarchar(100); set @Password ='rewards';
这是不正确的:
declare [Password] nvarchar(100); set [Password] ='rewards';
我认为问题是你的变量声明.参见这篇文章:http://www.databasejournal.com/features/mssql/article.php/3087431/T-SQL-Programming-Part-1—Defining-Variables-and-IFELSE-logic.htm