0
此鏈接是我找到問題答案的一部分的地方。SQL Server從動態查詢編寫器執行更新結果集
西蒙發佈
「當老闆寫的東西,如:。
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;
但兩個結果集類似如下:
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
非常感謝大家。 乾杯! 添
Hi Tim,th e'@ qry'變量應該足以存儲所有具有varchar(max)存儲的20億個字符(如果我是正確的)。問題是當你使用PRINT(@qry)時,management studio只打印前8000個字符(或類似的東西)。如果你想查看查詢,你可以嘗試執行多個打印:'PRINT(@qry)PRINT(SUBSTRING(@ qry,8000,8000))PRINT(SUBSTRING(@ qry,16000,8000))'。如果它仍然不起作用,你可以把它包裝在一個while循環中,並在10或20列的批次中執行它 –
你好Joao,我問的原因是我收到一條錯誤消息消息1038,級別15,狀態4,行2 對象或列名稱缺失或爲空。對於SELECT INTO語句,請確認每列都有一個名稱。對於其他語句,查找空的別名。別名定義爲「」或[]是不允許的。將別名更改爲有效的名稱。 –
剛剛在我的回答中發現了一個錯誤,@IsNullsColumns是不正確的,請檢查編輯的答案 –