首页 > 解决方案 > 使用动态变量的打印函数中的 SQL 语法错误

问题描述

当我运行以下查询时,它会打印语句,但会引发以下错误:

进程失败:')' 附近的语法不正确

代码:

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES 
          WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'Table_1')
    DELETE [dbo].[Table_1] 
    WHERE [UPDATED_DATE] <= DATEADD(dd, -90,'2018.02.23')

UPDATE DBO.T_REF_MASTER 
SET LAST_PURGE_DATE = GETDATE() 
WHERE TABLE_NAME = 'Table_1'

有人可以解释为什么会抛出该错误,因为当我一一运行各个语句时,它会完美执行

--Query
DECLARE @SQL VARCHAR(MAX)
DECLARE @S VARCHAR(MAX)
DECLARE @SQLExist VARCHAR(MAX)
DECLARE @db VARCHAR(10) = 'dbo'
DECLARE @TABLE_NAME VARCHAR(200) = 'Table_1'
DECLARE @NO_OF_DAYS VARCHAR(10) = '90'
DECLARE @LAST_PURGE_DATE VARCHAR(50) = '2018-02-22 10:46:49.953'

SET @SQLExist = 'IF EXISTS((SELECT 1 FROM 
INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''' 
                        + @db + ''' AND TABLE_NAME = ''' + @TABLE_NAME + 
''')' 
               --PRINT @SQLExist 
               SET @SQL = 'DELETE [' + @db + '].[' + @TABLE_NAME
                         + '] where [UPDATED_DATE] <= DATEADD(dd, -'
                         + CONVERT(VARCHAR,@NO_OF_DAYS) + ',''' + 
                         + CONVERT(VARCHAR,@LAST_PURGE_DATE, 102) + ''')'
              --PRINT @SQL
              SET @S = 'UPDATE DBO.T_REF_MASTER SET LAST_PURGE_DATE = 
getdate() WHERE TABLE_NAME = '
                       + '''' + CONVERT(VARCHAR, @TABLE_NAME) + ''');'
PRINT @SQLExist
print @SQL
PRINT @S 

标签: sql-servertsql

解决方案


我看到两个左括号 - (( - 在 EXISTS 之后,但在 @TABLE_NAME 之后只有一个右括号。


推荐阅读