0
是不是有什麼毛病代碼:SQL程序改變了我的代碼
SELECT Konta.ID, Konta.Okres, Konta.Symbol, Konta.Nazwa
FROM ep15_opisie.dbo.Konta Konta
WHERE (LEN(Konta.Symbol)='5') AND (((Konta.Symbol Like '%221%') OR (Konta.Symbol Like '%222%') OR (Konta.Symbol Like '%302%') OR (Konta.Symbol Like '%700%'))
但我使用程序(Microsoft查詢)更改代碼:
SELECT Konta.ID, Konta.Okres, Konta.Symbol, Konta.Nazwa
FROM ep15_opisie.dbo.Konta Konta
WHERE (Konta.Symbol Like '%221%') AND (LEN(Konta.Symbol)='5') OR (Konta.Symbol Like '%222%') AND (LEN(Konta.Symbol)='5') OR (Konta.Symbol Like '%302%') AND (LEN(Konta.Symbol)='5') OR (Konta.Symbol Like '%700%') AND (LEN(Konta.Symbol)='5')
它乘以LEN論據。這對我來說沒有意義,因爲我希望所有的參數的LEN都是5,但是不同的Like'XXX')。我正在使用SQL Server。
什麼是最好的方法只使用一個LEN參數?
只是問......是兩個查詢的結果不相似嗎?因爲該程序正在生成一個邏輯上等效的查詢...您想要A AND(B或C或D);它打開括號並給你(A和B)或(A和C)或(A和D)和A。 – dev8080
請記住,與更多過程語言不同,沒有保證條件的評估順序或評估多少次相同子句(前提是它們是確定性的)。兩個查詢在邏輯上是相同的,優化器應該爲任一個生成相同的計劃。 (另外,如果這是查詢或視圖嚮導改變你的代碼,簡單的答案是停止使用可視化設計器,只使用普通的查詢窗口 - 它們不會重新排列你的代碼) –
是的,查詢的結果是一樣。我想要做的是減少代碼的長度。如果我想包含第三個條件會怎麼樣?隨着每個條件的增加,代碼的長度將會爆炸。 – DJVarmian