Как использовать Dynami c SQL для обновления запроса с несколькими условиями? - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь выполнить следующую процедуру:

ALTER PROCEDURE UFP_PROCEDURE
    (@table_name1 varchar(100))
AS
BEGIN
    DECLARE @sql varchar(200);

    SET @sql = 'UPDATE' + @table_name1 +
               'SET' + QUOTENAME(operation) +  '=' + 'U' + 'where' + QUOTENAME(last_updated_time) + 'IS NOT NULL' + 'AND' + QUOTENAME(last_created_date) + 'IS NOT NULL' + 'AND'  + QUOTENAME(delete_flag) + 'IS NULL'

    EXEC(@SQL)
END

Я не понимаю, как использовать Dynami c SQL со всеми одинарными кавычками и столбцами, которые в QUOTENAME дают как недопустимые столбцы.

Здесь @table_name1 - это имя таблицы, которую я передаю из Azure трубопровода.

Если кто-то может дать решение ....., это было бы очень полезно.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020
ALTER PROCEDURE UFP_PROCEDURE
    (@table_name1 varchar(100))
AS
BEGIN
    DECLARE @sql varchar(200);

    SET @sql = 'UPDATE ' + QUOTENAME(@table_name1) +
               'SET operation= ''U'' where last_updated_time IS NOT NULL AND last_created_date IS NOT NULL AND delete_flag IS NULL'

    EXEC(@SQL)
END
0 голосов
/ 19 февраля 2020

В вашем динамическом запросе c есть проблемы из-за неправильных пробелов и неправильного QUOTENAME, измените ваш запрос следующим образом.

ALTER PROCEDURE UFP_PROCEDURE(@table_name1 varchar(100))
AS
BEGIN
    DECLARE @sql varchar(200);

   set @sql = 'UPDATE ' + quotename(@table_name1) +
    ' SET  operation = ''U'' where last_updated_time IS NOT NULL AND last_created_date IS NOT NULL AND delete_flag IS NULL'

    EXEC(@SQL)
END

Примечание : вместо EXEC, Вы всегда можете проверить свой запрос, используя print(@SQL)

...