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

ARDisivionNoデータベースのすべてのテーブルで21に設定された(ARDivisionno列名)値を更新しようとしています。ここ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

tableName を String 変数にすることはできないため、実行する SQL を動的に作成する必要があります。

を参照してください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 に答える