Sql-Server
使用“IN”語法添加計算列
我在 SQL Server 2008R2 中有一個查詢,我想針對一個計算列執行該計算列,然後我將對其進行索引 - 以加快速度。
該列現在是 int 類型。
我無法正確使用語法。
alter table dbo.tOutput Add StateNew as State IN (0, 10)
我收到一個錯誤
Incorrect syntax near the keyword 'IN'.
來自 C# 實體框架的查詢應該稍後使用索引並且——嗯——很快。
C#好像轉換成IN用法,原來是這樣的:
tOutput.Where(x => (x.State == 0) || (x.State == 10))
生成的 SQL 讀取
.. FROM tOutput WHERE State IN (0, 10) ..
我不認為你想要一個計算列。看起來您真正需要的是過濾索引(在 SQL Server 2008 中引入),
WHERE [State] IN (0, 10)
用作過濾器。創建此索引後,具有相同謂詞的查詢應使用此索引。請看一下:僅供參考:計算列是需要返回標量值的表達式。
State IN (0, 10)
不是標量表達式,這就是您收到錯誤的原因。您可以將其修改為類似CONVERT(TINYINT, CASE [State] WHEN 0 THEN 1 WHEN 10 THEN 1 ELSE 0 END)
,但隨後仍將包含所有行的索引。使用過濾索引將只包含匹配的行,這將更小更快:-)。