2
create procedure change_ardivisionno
@CustomerNo nvarchar(7),@table_name varchar(40)

AS
Begin
SET NOCOUNT ON
Update @table_name
SET ARDivisionNo = '21'
where @CustomerNo = (select customerno from mas_abc.dbo.customerlist)
and @table_name = (select tablename from table_list)
END

我正在尝试更新ARDisivionNoARDivisionno是列名)在数据库的所有表中设置为 21 的值,其中customerno存储在客户列表表中的客户列表。

我正在尝试创建此过程,但我不断收到错误消息:

*必须声明表变量“@table_name”。*

4

2 回答 2

2

像这样的东西,除了我不明白您的当前WHERE子句应该如何将更新限制为目标表中的一组行。现在它似乎会更新整个表格;我怀疑缺少连接条件。

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'UPDATE t
  SET ARDivisionNo = ''21''
  FROM dbo.' + QUOTENAME(tablename) + ' AS t
  INNER JOIN mas_abc.dbo.customerlist AS c
  ON c.customerno = @CustomerNo;';

PRINT @sql;
--EXEC sp_executesql @sql, N'@Cust NVARCHAR(7)', @CustomerNo;
于 2013-03-20T19:34:41.180 回答
0

您需要动态创建要执行的 SQL,因为 tableName 不能是 String 变量。

sp_executesql

declare @DBName varchar(40); 
set @DBName = 'AdventureWorks2012';
EXECUTE sp_executesql 
          N'SELECT * FROM '+@DBName+'.HumanResources.Employee 
          WHERE BusinessEntityID = @level',
          N'@level tinyint',
          @level = 109;
于 2013-03-20T19:32:07.783 回答