使用动态SQL删除表

时间:2011-05-10 21:49:47

标签: sql sql-server sql-server-2008

我的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'行发生错误。

我可能做错了什么?

如果重要,我正在使用MS SQL Server 2008,从C#调用。

1 个答案:

答案 0 :(得分:10)

DROP TABLE语句无法进行参数化,因为您正在尝试。您需要动态SQL。

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