1

テーブルに対して DML を実行できるように、データベースをテーブルに対して列挙するにはどうすればよいでしょうか? 単一のステートメントからテーブル名を取得することはすでに完了しています。

SELECT TABLE_NAME FROM MyDB.INFORMATION_SCHEMA.TABLES;

ほとんどのテーブルには同じ名前の特別なフィールドがあり、テーブルの列挙を通じてすべてを同じ値に更新したいと考えています。データベースの構造は、更新の伝播に参照整合性を使用できない方法であり、これは手動で更新する特別なケースです。それらの共通フィールドをループして更新する方法がわかりません。また、SpecialField を持たないテーブルに対して try-catch ブロックを指定しました。など:

declare @i int =0;
While(@i < MyDB.INFORMATION_SCHEMA.TABLES.length)
begin
   begin try
     Update MyDB.INFORMATION_SCHEMA.TABLES[i] set SpecialField= SomeValue;
   end try
   begin catch end catch
   set @i=@i+1;
end

ありがとう。

4

3 に答える 3

2

動的 SQL を使用する必要があります。つまり、UPDATEステートメントを文字列 (VarChar) で構成し、コマンドを使用してEXECコマンドを実行する必要があります。あなたが使用している特定の RDBMS がわからないので、例を挙げることはできません。しかし、基本的には、次のようになります。

declare @cmd VarChar(80)
declare @i int =0;
While(@i < MyDB.INFORMATION_SCHEMA.TABLES.length)
begin
   begin try
     set @cmd='Update '+MyDB.INFORMATION_SCHEMA.TABLES[i];
     set @cmd=@cmd +' set SpecialField= '+cast(SomeValue as VarChar);
     exec (@cmd)
   end try
   begin catch end catch
   set @i=@i+1;
end
于 2013-10-20T08:28:07.980 に答える