2012-11-15 29 views
11

一時テーブルから情報を取得して永続テーブルに格納するSQLを実行しています。私は3年前に書かれたステップガイドのステップからそれを手に入れました。そしてそれを書いた人はずっと去っています。 ここにこのSQLを使用するように指定されています。 nvarcharが認識されたカーソルオプションではありません

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] 
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) 

、それは次のとおりですので、私はそれを変更することが

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

を言ったように、

ので、最初は、私はちょうど2行目を変更しかし、それは私に、パスワード欄でエラーが発生しました何が私にエラーを与えた:

nvarchar is not a recognized cursor option 

誰かが私が行方不明を知っていますか?私が他の情報を提供できるなら、私はそうするために全力を尽くします。

ありがとうございました。

+1

宣言行だけを残します。セット行を削除します。 – Laurence

答えて

23

名前の前に@という記号で変数を宣言する必要があります。だから、これは正しいです:

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

+0

ローカル変数宣言で@を忘れたときも同様のエラーが発生しました。ローカル変数の前に@を付けてください。 @local_variable_nameを宣言してください –

1

[パスワード]が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) 
+0

それも私がそれをどのように解釈したかです。 –

関連する問題