問題描述:
使用 SELECT 語句,輪詢表中的數據,并且處理變量數據時,如果有ORDER BY語句,則得不到想要的結果,但去掉ORDER BY,結果正常。
具體的問題表現參考下面的問題重現代碼
問題重現代碼
-- 測試數據
DECLARE @T TABLE(id int,value nvarchar(16))
INSERT INTO @T SELECT
1, N'好人' UNION ALL SELECT
2, N'壞人' UNION ALL SELECT
3, N'吃飯' UNION ALL SELECT
4, N'垃圾'
-- 賦值處理
DECLARE @str nvarchar(4000)
SET @str = N'我不是一個好人,也不是垃圾'
SELECT @str = REPLACE(@str, value, N'<u>' value N'</u>')
FROM @T
WHERE CHARINDEX(value, @str) > 0
--ORDER BY CHARINDEX(value, @str) DESC
SELECT @str
/* -- 結果(當賦值處理語句注釋掉ORDER BY 時)
我不是一個<u>好人</u>,也不是<u>垃圾</u>
-- */
/* -- 結果(當賦值處理語句加上ORDER BY 時)
我不是一個<u>好人</u>,也不是垃圾
-- */
問題分析:
兩個處理語句的結果不同,通過查看它們的執行計劃應該可以看出原因所在,為此,通過
SET SHOWPLAN_ALL ON
輸出了兩種執行語句的執行計劃(僅StmtText部分,有興趣的讀者在自己的電腦上測試的時候,可以去了解其他部分的信息)
新聞熱點 疑難解答