删除表的存储过程

SSI*_*Off 8 sql t-sql stored-procedures

我创建了一个存储过程,如果表存在于数据库中,它将删除该表.使用EXEC运行存储过程时,我收到以下错误:

消息203,级别16,状态2,过程sp_DropIfExists,行13名称'IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'table_name')AND type =(N'U'))DROP TABLE [table_name ]'不是有效的标识符.

但是,如果我将生成的T-SQL复制并粘贴到管理工作室,它似乎运行正常.有人能解释为什么这是无效的吗?修复会很好,但我真的是在主要为什么之后,尽管如此会更好!提前致谢.

ALTER PROCEDURE [dbo].[sp_DropIfExists](@tableName VARCHAR(255)) 
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQL VARCHAR(MAX);
    SET @SQL = 'IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N''' + @tableName + ''') AND type = (N''U'')) DROP TABLE [' + @tableName + ']'
    PRINT @SQL;
    EXEC @SQL;
END
Run Code Online (Sandbox Code Playgroud)

may*_*cil 9

您可以使用 sp_execute

sp_executesql @SQL
Run Code Online (Sandbox Code Playgroud)

有关msdn文档链接的更多信息


小智 5

--ALTER (if procedure exists)

CREATE PROCEDURE sp_dropifexists (@tableName VARCHAR(255))

AS

BEGIN

    DECLARE @SQL VARCHAR(MAX);

    SET @SQL = 'IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N''' + @tableName + ''') AND type = (N''U'')) DROP TABLE [' + @tableName + ']'

    --if write EXEC @SQL without parentheses  sql says Error: is not a valid identifier

    EXEC (@SQL);

END

--test procedure

exec sp_DropIfExists 'table'
Run Code Online (Sandbox Code Playgroud)