Курсоры НИКОГДА не отвечают:)
ypercube сделал сложную часть. Вам нужно взять эту информацию и выполнить ее, выполняя оператор обновления для каждого столбца в каждой таблице. Вы можете сделать это с помощью оператора WHILE. Вот НЕПРОВЕРЕННЫЙ пример того, как вы могли бы сделать это:
--Set database to use
USE [MyDatabase];
GO
--Create table variable to hold table/column pairs
DECLARE @table TABLE (
[Key] BIGINT PRIMARY KEY IDENTITY (1, 1),
[TABLE_NAME] VARCHAR(100),
[COLUMN_NAME] VARCHAR(100)
);
--Populate table variable
INSERT INTO @table ([TABLE_NAME], [COLUMN_NAME])
SELECT [TABLE_NAME], [COLUMN_NAME]
FROM MyDatabase.INFORMATION_SCHEMA.COLUMNS
WHERE [TABLE_SCHEMA] = 'dbo'
AND [IS_NULLABLE] = 'YES';
--Initialize counting variables
DECLARE @counter BIGINT = 1;
DECLARE @max BIGINT = (SELECT COUNT(1) FROM @table);
--Iterate through each pair
WHILE @counter <= @max
BEGIN
--Assign the current pair values to variables
DECLARE @TableName VARCHAR(100), @ColumnName VARCHAR(100);
SELECT @TableName = [TABLE_NAME], @ColumnName = [COLUMN_NAME]
FROM @table
WHERE [Key] = @counter;
--Execute dynamic SQL
EXEC
(
'UPDATE [' + @TableName + ']' +
'SET [' + @ColumnName + '] = NULL' +
'WHERE RTRIM([' + @ColumnName + ']) = '''';'
);
--Increment the counter
SET @counter = @counter + 1;
END