【问题标题】:keep getting syntax error in t-sql在 t-sql 中不断出现语法错误
【发布时间】:2014-07-29 18:02:26
【问题描述】:

我已经创建了一个证书,现在我想删除证书签名并删除该证书。当我直接提供证书名称时,它正在工作,但是当我使用局部变量来提供名称时,它给了我语法错误。

我也尝试过不同的数据类型

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

【问题讨论】:

  • 我不认为你可以参数化它;您需要改用动态 SQL。
  • 您需要学习如何阅读documentation 中的语法图。对于certificate,它表示CERTIFICATE cert_name,这意味着它需要一个文字名称——不是字符串,也不是变量。如果你被允许这样的事情,他们明确指出。例如。如果允许一个变量,它将改为 CERTIFICATE cert_name | @cert_name_variable

标签: sql sql-server sql-server-2005 sql-server-2008-r2


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 2019-01-19
    • 2020-01-18
    • 2021-09-22
    • 1970-01-01
    • 2013-10-07
    相关资源
    最近更新 更多