Получение «Ошибка преобразования» в SQl Server - PullRequest
1 голос
/ 18 июня 2019

Неизвестная ошибка в динамической обработке строк в среде T-SQL.PS: я не собираюсь делать какие-либо преобразования.Просто хочу создать оператор Update и выполнить его позже

Код:

DROP TABLE IF EXISTS #TEMP

Select 'CRDB_Reporting' tablename,'MagnitudePackage' updatecolumn,'String' updatecolumntype,'''XLFWH''' updatevalue,'NatureOfFundCode' primaryfilter,'String' primaryfiltertype,'''FWH''' primaryfiltervalue,NULL remainingfilter
INTO #TEMP

Select  
CASE 
WHEN remainingfilter IS NOT NULL THEN 
    'Update [dbo].[' + tablename +'] Set [' + updatecolumn +']  = ' + updatevalue + ' Where [' + primaryfilter +']  = ' + primaryfiltervalue + ' And ' + remainingfilter
WHEN remainingfilter IS NULL THEN   
    'Update [dbo].[' + tablename +'] Set [' + updatecolumn +']  = ' + updatevalue + ' Where [' + primaryfilter +']  = ' + primaryfiltervalue + ' And '
END
From #Temp

Ожидаемый результат

Update [dbo].[CRDB_Reporting] Set [MagnitudePackage] = 'XLFWH' Where [NatureOfFundCode] = 'FWH'

Ошибка Msg:

Сообщение 245, Уровень 16, Состояние 1, Строка 34 Преобразование не удалось при преобразовании значения varchar 'Update [dbo]. [CRDB_Reporting] Set [MagnitudePackage] =' XLFWH 'Где [NatureOfFundCode] =' FWH 'And' в тип данных int.

1 Ответ

1 голос
/ 18 июня 2019

Когда вы создаете столбец remainingfilter, он имеет неявное преобразование int

Чтобы исправить это, используйте ...,cast(NULL as varchar(max)) remainingfilter

Тем не менее, я бы выбрал concat ()

Пример

Select  Cmd = concat('Update ',quotename(tablename),' set ',quotename(updatecolumn),' = ',updatevalue,' And ' + nullif(remainingfilter,''))
From #Temp

Возвращает

Update [CRDB_Reporting] set [MagnitudePackage] = 'XLFWH'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...