2012-11-15 3 views
11

Ich verwende einige SQL, die die Informationen aus einer temporären Tabelle übernehmen und in die permanente Tabelle einfügen. Ich habe es von einem Schritt für Schritt Guide vor 3 Jahren geschrieben, und die Person, die es geschrieben hat, ist lange weg. es heißt, diese sql hier zu verwenden.nvarchar ist keine erkannte Cursoroption

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) 

und dann nach, dass es sagt die folgenden

Wenn das Passwort für jede Zeile eindeutig zuzuordnen ist, nehmen Sie den Satz @Password = ‚Passwort‘; aus und ersetzen Sie das @Password durch [Passwort].

so änderte sich zunächst ich nur die zweite Zeile, so dass es

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

Aber das gab mir einen Fehler mit dem Passwort Spalte so ist, dann habe ich es zu:

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) 

und das ist Was gab mir den Fehler:

nvarchar is not a recognized cursor option 

Weiß jemand, was ich vermisse? Wenn ich irgendwelche anderen Informationen zur Verfügung stellen kann, werde ich mein Bestes tun, um dies zu tun.

Vielen Dank an alle, die dabei helfen können.

+1

Lassen Sie die declare-Zeile in Ruhe. Löschen Sie die Set-Zeile. – Laurence

Antwort

23

Sie müssen Variablen mit dem Zeichen @ vor den Namen deklarieren. So ist das richtig:

declare @Password nvarchar(100); 
set @Password ='rewards'; 

Dies ist nicht korrekt:

declare [Password] nvarchar(100); 
set [Password] ='rewards'; 

Ich denke, das Problem mit der Variablendeklaration. Siehe diesen Artikel: http://www.databasejournal.com/features/mssql/article.php/3087431/T-SQL-Programming-Part-1---Defining-Variables-and-IFELSE-logic.htm

+0

Ich hatte einen ähnlichen Fehler, als ich @ bei der lokalen Variablendeklaration vergessen habe.Put @ vor der lokalen Variable. Deklariere @local_variable_name –

1

Wenn [Passwort] eine Spalte in TempUsers ist, könnte dies bedeuten.

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

So habe ich es auch interpretiert. –

Verwandte Themen