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
我正在尝试在数据库的所有表中更新ARDisivionNo
(ARDivisionno
是列名)值设置为21,其中customerno
是客户列表中存储的客户列表表
我正在尝试创建此过程,但我一直收到错误:
*必须声明表变量“@table_name”。*
答案 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;