2014-06-09 46 views
1

我創建了一個證書,現在我想刪除證書籤名並刪除證書。當我直接提供證書名稱時,它正在工作,但是當我使用局部變量來提供名稱時,它給了我語法錯誤。在t-sql中不斷收到語法錯誤

我已經用不同的數據類型的嘗試,以及

text, varbinary(max), char(200), varchar(200), nvarchar(200) 

沒有這些數據類型的正常工作。

declare @certificate nvarchar(200) 
set @certificate = 'ITManagerCertificate' 

begin transaction 
use DBwork 

-- remove signature from stored procedure 
drop signature from Report_Manager 
by certificate @certificate 

-- drop certificate 
--DROP CERTIFICATE @certificate 

if @@ERROR > 0 
begin 
    rollback transaction 
end 
else begin 
    commit transaction 
end 
+0

我不認爲你可以說參數;您需要改用動態SQL。 –

+1

您需要了解如何閱讀[documentation](http://technet.microsoft.com/en-us/library/ms186977.aspx)中的語法圖。對於'certificate',它表示'CERTIFICATE cert_name',這意味着它需要一個字面名 - 不是*字符串*,不是*變量*。如果你被允許這樣的事情,他們明確表示。例如。如果允許一個變量,它會改爲'CERTIFICATE cert_name | @ cert_name_variable' –

回答

1

試試這個

declare @certificate nvarchar(200) 
declare @sql nvarchar(1000) 
set @certificate = N'ITManagerCertificate' 

begin transaction 
use DBwork 
--Remove Signature from Store procedure 
set @sql= N'drop signature from Report_Manager 
by certificate '+ @certificate 
execute sp_executesql @sql 
--Drop certificate 
--DROP CERTIFICATE @certificate 

if @@ERROR > 0 
begin 
rollback transaction 
end 
else begin 
commit transaction 
end