sql-server - 使用动态变量的打印函数中的 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
解决方案
我看到两个左括号 - (( - 在 EXISTS 之后,但在 @TABLE_NAME 之后只有一个右括号。
推荐阅读
- nginx - Nginx 在 ssh 后面进行基本身份验证
- assembly - 使用汇编语言清屏
- python - 在 matplotlib 中使用 axvspan 作为日期范围
- google-app-maker - 具有关系数据源的表打开数据源中的第一项
- c# - 如何让 X 轴从 0 开始并每秒更新而不是使用当前时间(DateTime)?
- php - 应包含的未定义 PHP 函数
- c# - 为什么我的 WPF UI 在单个实例中流式传输大量 IP 摄像机时滞后,但在多个实例中运行相同数量的流时却没有?
- r - 如何释放崩溃 R 会话的 big.matrix 对象使用的内存
- javascript - Chrome 错误:其 URL 包含两个已删除空格(`\n`、`\r`、`\t`)的资源请求
- ubuntu - Ubuntu,我需要在管理员帐户、终端或其他方法中访问标准用户文件都可以