我的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#调用。
答案 0 :(得分:10)
DROP TABLE
语句无法进行参数化,因为您正在尝试。您需要动态SQL。
DECLARE @DynSql nvarchar(max) = 'DROP TABLE ' + QUOTENAME(@Username + '_table');
EXEC(@DynSql);