Sql server 将旧代码转换为Tsql时返回0行
我正在将一个查询从其他平台转换为T-SQL 有人告诉我,在SSMS中,什么代码是无效的,所以我想我改变了一切,现在代码运行时,0行的输出受到影响。旧代码查找行 这个代码有什么明显的错误吗Sql server 将旧代码转换为Tsql时返回0行,sql-server,tsql,translate,Sql Server,Tsql,Translate,我正在将一个查询从其他平台转换为T-SQL 有人告诉我,在SSMS中,什么代码是无效的,所以我想我改变了一切,现在代码运行时,0行的输出受到影响。旧代码查找行 这个代码有什么明显的错误吗 SELECT 'invalid_character_in_prod_ID ', a.client_id, a.prod_id FROM tsc.ems_tvc_prod a, tsc.ems_tvc_clnt_bus c WHERE a.client_i
SELECT 'invalid_character_in_prod_ID ',
a.client_id,
a.prod_id
FROM tsc.ems_tvc_prod a,
tsc.ems_tvc_clnt_bus c
WHERE a.client_id = c.client_id
AND a.bus_unit = c.bus_unit
AND ts_sub_org = 'FORD'
AND ( Patindex(prod_id, Char(9)) > 0
OR Patindex(prod_id, Char(160)) > 0 )
你使用的是不正确的
尝试:
…或者按照@MartinSmith的建议使用。您需要
charindex
而不是patindex
。-在ANSI-92 SQL标准(20多年前)中,这种旧式的逗号分隔表列表样式被正确的ANSIJOIN
语法所取代,因此不鼓励使用它。不要将(unk)-SQL
等术语用作“未知SQL”的某种神秘速记-你愚弄了至少一小部分人,让他们认为你真的在使用一个名为那样的平台……UNk sql意味着我不知道旧代码是用什么风格的sql编写的。如果有用的话,我可以去获取原始代码。Thanks@JeffGreen不过,PATINDEX
的参数顺序是向后的。你确定你正确使用了CHARINDEX
吗?@JeffGreen,你的参数是向后的……你在Char(9)中查找整个prod\u id
这是行不通的。请参考我在回答这些函数的文档时提供的链接。@JeffGreen也许你有VB或类似的背景,其中构造是instr(大字符串,小字符串)
-在t-SQL中,它是相反的,charindex(小字符串,大字符串)
。JNK在回答中指出的文档也应该向您展示这一点。
AND ( Patindex('%'+Char(9)+'%', prod_id) > 0
OR Patindex('%'+Char(160)+'%', prod_id) > 0 )