使用动态SQL删除表格

4

我遇到了一个问题,与我的SQL存储过程有关,具体来说是在使用VARCHAR()作为表名时出现了问题。

我的代码(不起作用)如下:

CREATE PROCEDURE DeleteUser 

 @Username VARCHAR(50)

    AS
    BEGIN

    --DROP THE SURF TABLE
    IF EXISTS (SELECT 1 
      FROM sysobjects 
      WHERE xtype='u' AND name=@Username + '_table') 
          DROP TABLE @Username + '_table'  

 END
GO

然而,在执行时,它会在 DROP TABLE @Username + '_table' 行出现错误。

我可能做错了什么?

如果有影响的话,我是从C#中调用MS SQL Server 2008。


Msg 102,级别15,状态1,过程DeleteUser,第21行 '@Username'附近语法不正确。第21行是DROP TABLE行。 - Brett
1个回答

11

DROP TABLE语句无法像你尝试的那样进行参数化。你需要使用动态SQL。

DECLARE @DynSql nvarchar(max) = 'DROP TABLE ' + QUOTENAME(@Username + '_table');
EXEC(@DynSql);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接