【发布时间】:2012-07-13 12:00:23
【问题描述】:
我有以下 SQL Server 存储过程:
CREATE PROCEDURE ispsDcOhcAgg @TmpTableName NVARCHAR(50), @ListItem NVARCHAR(50)
AS
IF EXISTS (SELECT name
FROM sys.tables
WHERE name = @TmpTableName)
DROP TABLE @TmpTableName; -- This will not work.
GO
这显然行不通(请参阅上面代码段中的评论)。我发现解决这个问题的唯一(也是非常丑陋的)方法是执行以下操作
CREATE PROCEDURE ispsDcOhcAgg @TmpTableName NVARCHAR(50), @ListItem NVARCHAR(50)
AS
DECLARE @SQL NVARCHAR(4000)
SET @SQL = N'IF EXISTS (SELECT name ' +
N'FROM sys.tables ' +
N'WHERE name = N' + N'''' + @TmpTableName + N''') ' +
N'DROP TABLE ' + @TmpTableName + N';'
EXEC sp_executesql @SQL;
GO
这真的很臭,对于大型存储过程来说,这太可怕了!
还有其他我不知道的方法吗?
感谢您的宝贵时间。
【问题讨论】:
-
不行,没有别的办法,只能使用动态 SQL 来实现。
-
if exists部分可以作为带有变量的内联语句正常工作,它只是一个where子句,如果满足条件,则需要动态执行drop
标签: tsql variables stored-procedures sql-server-2008-r2