2012-11-15 20 views
11

Tôi đang chạy một số sql lấy thông tin từ một bảng tạm thời và đặt nó vào bảng vĩnh viễn. Tôi đã đọc nó từ một hướng dẫn từng bước được viết cách đây 3 năm, và người viết nó đã biến mất lâu rồi. tiểu bang sử dụng sql này tại đây.nvarchar không phải là tùy chọn con trỏ được nhận dạng

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) 

và sau đó sau đó nó nói như sau

Nếu mật khẩu là duy nhất cho mỗi hàng, đi bộ @Password = ‘Mật khẩu’; tắt và thay thế @Password bằng [Mật khẩu].

nên lúc đầu tôi chỉ cần thay đổi dòng thứ 2 nên nó nói

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

Nhưng điều đó đã cho tôi một lỗi với cột mật khẩu để sau đó tôi thay đổi nó để:

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) 

và đó là những gì đã cho tôi lỗi:

nvarchar is not a recognized cursor option 

Có ai biết những gì tôi đang thiếu? Nếu tôi có thể cung cấp bất kỳ thông tin nào khác, tôi sẽ cố hết sức để làm như vậy.

Cảm ơn bất kỳ ai có thể trợ giúp về vấn đề này.

+1

Để nguyên dòng tuyên bố. Xóa dòng Set. – Laurence

Trả lời

23

Bạn phải khai báo các biến có ký hiệu @ trước tên. Vì vậy, đây là đúng:

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

Điều này là không chính xác:

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

Tôi nghĩ rằng vấn đề là với khai báo biến của bạn. Xem bài viết này: http://www.databasejournal.com/features/mssql/article.php/3087431/T-SQL-Programming-Part-1---Defining-Variables-and-IFELSE-logic.htm

+0

Tôi có lỗi tương tự khi tôi quên @ tại khai báo biến cục bộ. Đặt @ ở phía trước biến cục bộ. Khai báo @local_variable_name –

1

Nếu [Mật khẩu] là cột trong TempUsers, điều đó có thể có nghĩa là điều này.

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

Đó là cách tôi diễn giải nó. –

Các vấn đề liên quan