2012-11-15 20 views
11

मैं कुछ एसक्यूएल चला रहा हूं जो एक अस्थायी तालिका से जानकारी लेता है और इसे स्थायी तालिका में रखता है। मुझे इसे 3 साल पहले लिखे गए एक चरण-दर-चरण मार्गदर्शिका से मिला, और जिसने इसे लिखा वह लंबे समय से चला गया है। यह इस वर्ग का उपयोग करने के लिए यहां बताता है।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 = 'पासवर्ड' ले; @ पासवर्ड के साथ @ पासवर्ड को बंद करें और बदलें।

तो पहली बार में मैं सिर्फ 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 

क्या कोई जानता है कि मुझे क्या याद आ रहा है? अगर मैं कोई अन्य जानकारी प्रदान कर सकता हूं तो मैं ऐसा करने के लिए अपनी पूरी कोशिश करूंगा।

किसी भी व्यक्ति के लिए धन्यवाद जो इस में सहायता करने में सक्षम है।

+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

घोषित करें इस तरह मैंने इसका भी अर्थ दिया। –

संबंधित मुद्दे