sql-server - 当我检查 SentryIO 时,'CAST' 附近的语法不正确,预期为 'AS'
问题描述
下面的代码在 SQL Server 中成功执行,但出现错误
> Incorrect syntax near 'CAST', expected 'AS'
当我检查 SentryIO 时。知道为什么吗?
UPDATE uldd_rule_codes
SET
rule_logic = 'data_Master.[job id] = ''''6033'''' and data_miscloaninformation.Calculated_Indicator_FICO < ''''660'''' and data_miscloaninformation.[Original Lock Date] BETWEEN CAST (''''2020-06-03'''' AS DATE) and CAST(''''2020-06-14'''' AS DATE) and data_master.[Pool Number] not like ''''3%'''' AND data_master.[loan type] in (''''2'''',''''3'''',''''5'''') and data_miscreportinginformation.sub_channel not in (''''Cal-HFA'''',''''Del-HFA'''',''''Den-HFA'''',''''Phx-HFA'''',''''Tex-HFA'''',''''Wash-HFA'''')'
WHERE
rule_id = 12;
解决方案
您的UPDATE
语句将按原样运行 - 它不做任何语法工作。但是,您的值周围有太多的单引号,这会导致执行时出现异常。
从您的问题中考虑以下内容:
DECLARE @rule VARCHAR(255) = 'SELECT CAST(''''2020-06-14'''' AS DATE)';
EXEC ( @rule );
执行时返回:
Incorrect syntax near '2020'.
但是,删除日期值周围的额外单引号:
DECLARE @rule VARCHAR(255) = 'SELECT CAST(''2020-06-14'' AS DATE)';
EXEC ( @rule );
退货
2020-06-14
快速注释/更新:
如果一个值是一个已知的数字,不要用引号引起来。
例如:
data_Master.[job id] = ''''6033'''' and
如果[job_id]是一个数值,你应该有这个:
data_Master.[job id] = 6033 and
否则 SQL Server 需要对可能导致性能问题的值进行隐式转换。
推荐阅读
- node.js - sql.Connection 不是构造函数
- cassandra - Cassandra:应用 TWCS 时还需要手动分桶吗?
- jquery - 使用 slice() 和 clone() 多次追加到同一个 div
- c# - 如何使用 C# 获取 XML 文件中所有元素的属性值?
- python - 在pyqt中更改窗口的功能问题
- jquery - 打字文字动画无法控制宽度
- javascript - 如何解决“500(内部服务器错误)”(Laravel - ajax)
- css - 如何使应用程序脚本 Web 应用程序显示为实际可用高度的 100%?
- google-app-engine - 积分结束后如何恢复已删除的虚拟机?
- node.js - Node 服务器的 Apache 反向代理