存储过程中的表变量

时间:2013-05-14 10:41:00

标签: sql sql-server tsql stored-procedures

我想创建一个简单的存储过程,它将现有表作为参数。

我认为这个程序应该有效:

@UserID INT,
@TableName varchar(255)
AS
BEGIN
    IF(@UserID is not null)
    BEGIN
       update t
       set t.ProductID = 100
       from dbo.[@TableName] t

    END

当我使用表名执行此存储过程时,查询已完成但出现错误:

  

无效的对象名称'dbo。@ TableName'。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您必须执行以下操作:

DECLARE @SQL NVARCHAR(100)
SET @SQL = 'UPDATE ' + @TABLENAME + ' SET t.ProductID = 100 '
EXEC sp_executesql @SQL

注意:您没有WHERE子句,因此@TableName中的所有项目都将更新。