T-SQL:在case块中执行命令

时间:2015-07-17 08:22:19

标签: sql sql-server tsql

有没有办法在T-SQL中执行类似的操作?

sizeof(a)

如果服务器版本是2005,则此案例块应选择Command_A。如果不是,则应执行Command_B。

4 个答案:

答案 0 :(得分:1)

实际上这个案例是SELECT的“子命令” 你可以用这样的东西实现你想要的东西:

declare @s varchar(255)
select @s = case @@VERSION 
when 'SQL Server 2005'
THEN 'command 1'
ELSE 'command 2'
END
exec (@s)

答案 1 :(得分:0)

这应该很好,就像这样:

if (@@version like '%SQL Server 2014%') select '2014'
else select 'Other'

请参阅SQL Fiddle

但是如果您要使用的代码不支持您运行它的版本,则应该创建要调用的单独过程,或者使用动态SQL。

答案 2 :(得分:0)

您可以使用动态SQL

DECLARE @dynamicSql VARCHAR(max);
CASE @@VERSION
            WHEN 'SQL Server 2005'
                THEN @dynamicSql = 'Command_A'
            ELSE @dynamicSql = 'Command_B'
            END

    EXEC (@dynamicSql)

答案 3 :(得分:0)

您可以使用此CASE来获取sql-server版本:

SELECT CASE SUBSTRING(CAST(SERVERPROPERTY('productversion')AS nvarchar(128)), 1, CHARINDEX('.', CAST(SERVERPROPERTY('productversion')AS nvarchar(128))) - 1)
       WHEN 7 THEN 'SQL Server 7'
       WHEN 8 THEN 'SQL Server 2000'
       WHEN 9 THEN 'SQL Server 2005'
       WHEN 10 THEN 'SQL Server 2008/2008 R2'
       WHEN 11 THEN 'SQL Server 2012'
       WHEN 12 THEN 'SQL Server 2014'  
       ELSE 'Unsupported' END AS DB_Version

然后你只需要根据结果执行动态sql。

Demo