删除表使用动态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#调用。当你试图
答
的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
有什么错误? – 2011-05-10 21:53:47
消息102,级别15,状态1,过程DeleteUser 21行 附近有语法错误@UserName'。第21行是DROP TABLE行。 – Brett 2011-05-10 21:55:01