Nvarchar не является признанным курсором

Я запускаю некоторый sql, который берет информацию из временной таблицы и помещает ее в постоянную таблицу. Я получил его из пошагового руководства, написанного 3 года назад, и тот, кто его написал, давно ушел. он заявляет, что использует этот 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 на [Пароль].

поэтому сначала я просто изменил вторую строку, так что сказал

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

Вы должны объявить переменные с знаком @ перед именами. Итак, это правильно:

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

Ответ 2

Если [Пароль] является столбцом в 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)