如何更新数据库中所有表的特定列值

时间:2013-03-20 19:24:42

标签: sql sql-server sql-server-2008

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”。*

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;