2014-09-12 32 views
-1

我正在將某個查詢從其他平臺轉換爲T-SQL。將舊代碼轉換爲Tsql時返回0行

有人告訴我,我在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) 
+2

什麼是unk SQL? – 2014-09-12 20:15:20

+3

反正你需要'charindex'而不是'patindex'。 – 2014-09-12 20:16:42

+5

[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 在ANSI - ** 92 ** SQL標準(**超過20年前的**)中,舊式*逗號分隔的表*樣式列表被替換爲* proper * ANSI'JOIN'語法並且不鼓勵使用它 – 2014-09-12 20:33:53

回答

5

您使用PATINDEX不正確。

嘗試:

AND (Patindex('%'+Char(9)+'%', prod_id) > 0 
       OR Patindex('%'+Char(160)+'%', prod_id) > 0) 

...或者只是使用CHARINDEX作爲@MartinSmith建議。

+0

UNK sql意味着我不知道什麼味道的SQL的舊代碼被寫入。如果它有幫助,我可以去得到原來的代碼。謝謝 – 2014-09-12 20:34:52

+0

我試着Charindex並得到相同的答案。 。 。謝謝 – 2014-09-12 20:35:28

+2

@JeffGreen'PATINDEX'的參數順序是倒退的。你確定你正確使用'CHARINDEX'嗎? – JNK 2014-09-12 20:37:05