null のテーブル内のすべてのフィールドを空のフィールドだけに変更する簡単な方法はありますか。私は多くの列を持っているので、列ごとではなくテーブルごとにそれを行う方法があるかどうか疑問に思いました。
次のようなものが必要です
update table 1
set * = ''
where * is null
しかし明らかにこれは間違った構文です
null のテーブル内のすべてのフィールドを空のフィールドだけに変更する簡単な方法はありますか。私は多くの列を持っているので、列ごとではなくテーブルごとにそれを行う方法があるかどうか疑問に思いました。
次のようなものが必要です
update table 1
set * = ''
where * is null
しかし明らかにこれは間違った構文です
このコードは更新ステートメントのリストを生成します。実行するだけで済みます。
SELECT 'update '+ so.name+' set '+sc.name+'= '''' where '+sc.name+' is null '
FROM sysobjects so
JOIN syscolumns sc ON so.id = sc.id
JOIN systypes st ON sc.xtype=st.xtype
where so.type = 'U'
and st.name in('varchar','char')
--and so.name = 'tab' <--- if you need update only one table
ここ (sql fiddle)で、その仕組みを確認できます。
次のようなことを試してください:
UPDATE TABLE1
SET ( COL1, COL2, COL3, COL4 ) = (SELECT COL1A,
COL2A,
COL3A,
COL4A
FROM TABLE2
WHERE COL5A = TABLE1.COL5)
WHERE COL5 IN (SELECT COL5A
FROM TABLE2)
NULL を含むすべての NULLable フィールドを空白に更新するスクリプトを生成する場合は、次のコードを使用できます。
DECLARE @TAB VARCHAR(1000) = 'ProductVendor',
@COL VARCHAR(1000),
@SQL VARCHAR(MAX)
DECLARE UPDATE_CURSOR CURSOR LOCAL FAST_FORWARD FOR
SELECT t2.NAME
FROM (SELECT *
FROM SYSOBJECTS
WHERE XTYPE = 'u'
AND NAME = @TAB)T1
INNER JOIN SYSCOLUMNS t2
ON T1.ID = t2.ID
WHERE t2.ISNULLABLE = 1
OPEN UPDATE_CURSOR
SET @SQL = 'UPDATE ' + @TAB + ' SET '
FETCH NEXT FROM UPDATE_CURSOR INTO @COL
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = @SQL + @COL + ' = Isnull(' + @COL + ', ''''),'
FETCH NEXT FROM UPDATE_CURSOR INTO @COL
END
CLOSE UPDATE_CURSOR
DEALLOCATE UPDATE_CURSOR
SET @SQL = LEFT(@SQL, Len(@SQL) - 1)
EXEC (@SQL)
必要なのは、最初のテーブル名 (TAB 変数) を変更することだけです。このスクリプトは、1 回の実行ですべての列を更新する単一のクエリを生成します。
これを試してください
update table1 set columnnames='' where columnnames ='null'