0

このリンクは、私の問題に対する答えの一部を見つけた場所です。

SQL はすべての NULL を置き換えます

サイモンが投稿した

「ボスになりなさい。次のように書いてください。

select 'update ' + table_name + ' set [' + column_name + '] = '''' where [' + column_name + '] is null'
from tempdb.information_schema.columns
where table_name = 'YourTableName'

それはあなたのために大きな古いクエリを吐き出します. どういたしまして"

しかし、パラメーターで結果セットを使用し、すべての更新ステートメントを実行する方法があるかどうかを知りたいです。私はこのようなことを試しました

DECLARE @sql2 AS NVARCHAR(MAX) = N' 
SELECT ''UPDATE '' + table_name + '' SET ['' + column_name + ''] = '''''''' WHERE ['' + column_name + ''] IS NULL''
FROM tempdb.information_schema.columns
WHERE table_name = ''##tempF'''

EXEC sp_executesql @stmt = @sql2;

DECLARE @sql3 AS NVARCHAR(MAX);
SET @sql3 = (SELECT @sql2);

EXEC sp_executesql @stmt = @sql3;

ただし、以下にリストされているような 2 つの結果セット:

UPDATE ##tempF SET [claimid] = '' WHERE [claimid] IS NULL
UPDATE ##tempF SET [hdr_status] = '' WHERE [hdr_status] IS NULL
UPDATE ##tempF SET [memid] = '' WHERE [memid] IS NULL

皆様、どうもありがとうございました。乾杯!ティム

4

1 に答える 1

0

このような

--initialize variables
DECLARE @UpdateColumns varchar(max) = '' 
DECLARE @IsNullColumns varchar(max) = ''

SELECT 
    @UpdateColumns = @UpdateColumns + ',[' + COLUMN_NAME + '] = ISNULL([' + COLUMN_NAME + '],'''')',
    @IsNullColumns = @IsNullColumns + ' OR [' + COLUMN_NAME + '] IS NULL'
FROM tempdb.information_schema.columns
WHERE table_name = '##tempF'

これにより、2 つの変数に次の値が入力されます。

@UpdateColumns = ',[claimid] = ISNULL([claimid],''''),[hdr_status] = ISNULL([hdr_status],''''),[memid] = ISNULL([memid],'''')'
@IsNullColumns = ' OR [claimid] IS NULL OR [hdr_status] IS NULL OR [memid] IS NULL'

次に、すべてを組み立てる必要があります (各変数の最初の文字を削除することを忘れないでください (STUFF 関数が最適です)。

DECLARE @qry varchar(max) = 'UPDATE ##tempF SET ' 
+ STUFF(@UpdateColumns,1,1,'') + ' WHERE ' 
+ STUFF(@IsNullColumns,1,4,'') --the 4 in here is to get rid of ' OR ' (4 chars)

EXEC(@qry)
于 2013-07-03T23:12:20.533 に答える