有没有办法在T-SQL中执行类似的操作?
sizeof(a)
如果服务器版本是2005,则此案例块应选择Command_A。如果不是,则应执行Command_B。
答案 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。