我有一个#temp
表,其中包含存储过程的名称。
DECLARE @object VARCHAR(200)
SET @object = (SELECT Top 1 Te.[this Object...] From #Temp Te)
IF OBJECT_ID(@object) IS NOT NULL
DROP PROCEDURE @object
但是在最后一步我得到错误
@ object'附近的语法不正确。
这是因为@object
类型为VARCHAR
还是什么?
这适用于SQL Server 2012
答案 0 :(得分:4)
你不能那样做。你需要使用动态sql。 类似的东西:
DECLARE @object NVARCHAR(200)
DECLARE @sql NVARCHAR(max)
SET @object = (SELECT Top 1 Te.[this Object...] From #Temp Te)
IF OBJECT_ID(@object) IS NOT NULL
BEGIN
SET @sql = 'DROP PROCEDURE ' + @object
sp_executesql @sql
END
答案 1 :(得分:3)
看看这里:
你需要编写一个sql语句并单独执行它。
部分答案:
declare @sql varchar(64);
set @sql = 'drop proc ' + @stored_procedure_name;
exec(@sql);
您可以将@stored_procedure_name替换为@object
答案 2 :(得分:0)
DROP PROCEDURE需要一个不是varchar的对象
尝试:
EXECUTE ('DROP PROCEDURE ' + @object)