SQL Server 2008 R2、Windows 7 OS を使用しています。
サーバー内には、con1
次の SQL ステートメントによって作成されたテーブルがあります。
CREATE TABLE [dbo].[con1](
[digit_str] [nvarchar](50) NULL
) ON [PRIMARY]
表には、con1
次の値があります。
digit_str
----------------
1
1
2
3
4
5
1.
データベースに対して次の SQL ステートメントを実行しました。
SELECT t1.digit FROM
(
select CAST(digit_str as int) as digit from con1 where RIGHT(digit_str,1) <> '.'
) as t1
where t1.digit <> 1
サーバーから次のエラーメッセージが表示されました。
nvarchar 値 '1' の変換中に変換に失敗しました。データ型 int に。
内部 SQL が最初に実行され、一時テーブルが作成されたと思ったt1
ので1.
、テーブルに含まれていないためt1
、SQL パーサーはwhere t1.digit <> 1
一時テーブルをフィルター処理するために使用しますt1
。
しかし、上記は正しくないように思われるので、上記のSQLの実行順序を説明できる人はいますか?