Sql-Server

有沒有辦法根據 SQL Server 版本執行 SQL 語句?

  • December 12, 2016

如果 SQL Server 是 2008 或更高版本,我想在表上創建計算索引,如果 SQL Server 是 2005 或更早版本,我想創建一個簡單索引:

-- check for sql server version
if (select cast(left(cast(serverproperty('productversion') as varchar), 4) as decimal(5, 3))) >= 10 
       CREATE unique nonclustered index ix1_table
           ON table (column1, column2)
           WHERE column1 is not null and column2 is not null
       ELSE
           CREATE nonclustered index ix1_table
               ON table (column1, column2)

問題是評估了整個語句,並且在 SQL Server 2005 上這會引發錯誤:

關鍵字“WHERE”附近的語法不正確。

是否可以基於 SQL Server 版本以某種方式創建不同的索引?

您可以使用動態 SQL

我的意思是先檢查版本

然後使用字元串變數建構 SQL 語句,例如 nvarchar(max)

然後通過 sp_executeSQL 執行

我認為以下腳本可以完成這項任務

-- check for sql server version
declare @sql nvarchar(max)
if (select cast(left(cast(serverproperty('productversion') as varchar), 4) as decimal(5, 3))) >= 10 

set @sql = N'CREATE unique nonclustered index ix1_table ON [table] (column1, column2)
       WHERE column1 is not null and column2 is not null'

       ELSE

set @sql = N'CREATE nonclustered index ix1_table ON [table] (column1, column2)'


exec sp_executeSQL @sql

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