使用动态SQL删除表

Bre*_*ett 4 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
Run Code Online (Sandbox Code Playgroud)

但是,在执行时它DROP TABLE @Username + '_table'在行上出错.

我可能做错了什么?

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

Mar*_*ith 10

DROP TABLE当你尝试时,语句不能被参数化.您需要动态SQL.

DECLARE @DynSql nvarchar(max) = 'DROP TABLE ' + QUOTENAME(@Username + '_table');
EXEC(@DynSql);
Run Code Online (Sandbox Code Playgroud)