【问题标题】: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
【解决方案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