首页 > 解决方案 > 当我检查 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;

标签: sql-server

解决方案


您的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 需要对可能导致性能问题的值进行隐式转换。


推荐阅读