【问题标题】:How to use dynamic SQL for updating the query with multiple conditions?如何使用动态 SQL 更新具有多个条件的查询?
【发布时间】:2020-06-03 04:44:02
【问题描述】:

我正在尝试执行以下程序:

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

我不知道如何使用带有所有单引号的动态 SQL,并且 QUOTENAME 中的列被视为无效列。

这里@table_name1 是我从 Azure 管道传递的表名。

如果有人能给出解决方案.....那将非常有帮助。

【问题讨论】:

    标签: sql azure dynamic azure-active-directory asset-pipeline


    【解决方案1】:

    由于不正确的空格和不正确的 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
    

    注意:您可以随时使用print(@SQL) 来检查您的查询,而不是EXEC

    【讨论】:

    • 谢谢PSK!太好了
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 2022-11-17
      • 1970-01-01
      • 2017-02-24
      • 2021-07-26
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多