删除表使用动态SQL

删除表使用动态SQL

问题描述:

我有我的SQL存储过程麻烦,特别是VARCHAR()作为传递它使用一个表名。删除表使用动态SQL

我的代码(不工作)是:

CREATE PROCEDURE DeleteUser 

@Username VARCHAR(50) 

    AS 
    BEGIN 

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

END 
GO 

然而,在DROP TABLE @Username + '_table'行执行它的错误。

我能怎么做错误?

我使用MS SQL Server 2008中,如果它很重要,从C#调用。当你试图

+0

有什么错误? – 2011-05-10 21:53:47

+0

消息102,级别15,状态1,过程DeleteUser 21行 附近有语法错误@UserName'。第21行是DROP TABLE行。 – Brett 2011-05-10 21:55:01

DROP TABLE语句不能parametrised。您需要动态SQL。

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

完美的作品!谢谢! – Brett 2011-05-10 21:58:09

+3

QUOTENAME为+1 – 2011-05-11 01:26:21