問題描述:
使用 SELECT 語句
具體的問題表現參考下面的問題重現代碼
問題重現代碼
DECLARE @T TABLE(id int
INSERT INTO @T SELECT
DECLARE @str nvarchar(
SET @str = N
SELECT @str = REPLACE(@str
FROM @T
WHERE CHARINDEX(value
SELECT @str
/*
我不是一個<u>好人</u>
/*
我不是一個<u>好人</u>
問題分析
兩個處理語句的結果不同
SET SHOWPLAN_ALL ON
輸出了兩種執行語句的執行計劃(僅StmtText部分
StmtText
Step
DECLARE @str nvarchar(
SELECT @str = REPLACE(@str
|
Compute Scalar(DEFINE:([Expr
|
Filter(WHERE:(charindex(@T
|
Table Scan(OBJECT:(@T))
DECLARE @str nvarchar(
SELECT @str = REPLACE(@str
|
Sort(ORDER BY:([Expr
|
Compute Scalar(DEFINE:([Expr
|
Filter(WHERE:(charindex(@T
|
Table Scan(OBJECT:(@T))
從上面的列表可以看出
當有ORDER BY子句時
當沒有ORDER BY子句時
問題解決方法
修改處理語句
對於示例中的處理語句
DECLARE @str nvarchar(
SET @str = N
SELECT @str = REPLACE(@str
FROM(
SELECT TOP
value
FROM @T
WHERE CHARINDEX(value
ORDER BY CHARINDEX(value
)A
SELECT @str
補充
此問題的結論只是筆者對於查詢分析的一個推論
From:http://tw.wingwit.com/Article/program/Oracle/201311/17560.html