19

一時テーブルから情報を取得して永続テーブルに配置する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)

その後、次のように表示されます

パスワードが各行で一意である場合は、set @Password='Password';を取得します。オフにして、@Passwordを[Password]に置き換えます。

最初は2行目を変更しただけなので

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 

誰かが私が欠けているものを知っていますか?他の情報を提供できる場合は、最善を尽くします。

これを手伝ってくれる人に感謝します。

4

2 に答える 2

37

@名前の前に記号を付けて変数を宣言する必要があります。したがって、これは正しいです:

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

于 2012-11-15T22:05:55.753 に答える
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)
于 2012-11-15T22:36:50.670 に答える