Sql-Server

使用“IN”語法添加計算列

  • January 10, 2018

我在 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),但隨後仍將包含所有行的索引。使用過濾索引將只包含匹配的行,這將更小更快:-)。

引用自:https://dba.stackexchange.com/questions/195000