@empty
пусто.Она не представляет пустую строку при ее объединении.
Одно простое решение:
SET @empty = '''';
Однако вы можете сделать то же самое, передав параметр с помощью sp_executesql
.И мне нравится такой подход:
declare @cnt INT = 1959;
while @cnt < 2017
begin
declare @sql nvarchar(1000)
set @sql = 'UPDATE [HDProjEtap1Proba1].[dbo].[TESTGDP] SET [' + CAST(@cnt as nvarchar(255)) + '] = null WHERE ['+ CAST(@cnt as nvarchar(255)) +'] = @empty';
exec sp_executesql @sql, N'@empty nvarchar(255)', @empty = '';
set @cnt = @cnt + 1;
end;
Или событие:
declare @cnt INT = 1959;
while @cnt < 2017
begin
declare @sql nvarchar(1000)
set @sql = '
UPDATE [HDProjEtap1Proba1].[dbo].[TESTGDP]
SET [@colname] = null
WHERE [@colname] = @empty';
set @sql = replace(@sql, '@colname', cast(@cnt as varchar(255));
exec sp_executesql @sql, N'@empty nvarchar(255)', @empty = '';
set @cnt = @cnt + 1;
end;
Обратите внимание, что в этой версии оператор SQL легко читается (и, следовательно, может изменяться и отлаживаться).Он определяется параметрами, которые затем впоследствии заменяются.