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)