Sql server 将旧代码转换为Tsql时返回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

我正在将一个查询从其他平台转换为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_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多年前)中,这种旧式的逗号分隔表列表样式被正确的ANSI
JOIN
语法所取代,因此不鼓励使用它。不要将
(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 )