Yor*_*ort 5 t-sql sql-server detect sql-server-express
我需要一种安全(即一致,健壮)的方法来检测我正在访问的sql server是否是Sql Express.我想我更愿意从TSQL中做到这一点,因为我已经有一个连接字符串和我需要执行TSQL的所有库(这应该有助于避免WMI是否安装/运行的问题,用户有访问注册表的权限等).
有谁知道这样做的方法?
谢谢.
PS:基本上我想这样做,所以我可以监控我的数据库大小与4gb限制,并在我接近它时采取行动...但如果我在一个完整的Sql Server版本上运行,那么我不希望代码担心它,因为没有(实际)硬编码限制.我可以在我的程序中进行手动设置,但如果代码自动执行正确的操作会更好,因此需要知道服务器是否是"Express"版本.
使用
SELECT SERVERPROPERTY('EditionID')
Run Code Online (Sandbox Code Playgroud)
要么
SELECT SERVERPROPERTY('Edition')
Run Code Online (Sandbox Code Playgroud)
检测正在运行的SQLServer版本.
http://msdn.microsoft.com/en-us/library/ms174396.aspx
如果不是,则返回0,如果是,则返回非零(此处为126):
select charindex('Express Edition',@@version)
Run Code Online (Sandbox Code Playgroud)
布尔上下文中的示例:
if (select charindex('Express Edition',@@version)) > 0
begin
print 'Express edition!'
end
else
begin
print 'Not Express edition!'
end
Run Code Online (Sandbox Code Playgroud)
该SERVERPROPERTY函数 已经在多个其他答案中提到过,但是有一个比检查字符串是否包含“Express Edition”更好的解决方案:参数EngineEdition,它返回一个int值。
引用链接中的内容:
引擎版
服务器上安装的 SQL Server 实例的数据库引擎版本。
1 = 个人或桌面引擎(在 SQL Server 2005 及更高版本中不可用。)
2 = 标准(针对标准、Web 和商业智能返回此值。)
3 = 企业版(针对评估版、开发版和两个企业版返回此值。)
4 = Express(针对 Express、Express with Tools 和 Express with Advanced Services 返回此值)
5 = SQL 数据库
6 - SQL 数据仓库
基本数据类型:int
所以你可以像这样检查 Express Edition:
if SERVERPROPERTY('EngineEdition') = 4
begin
select 'Express'
end
else
begin
select 'not Express'
end
Run Code Online (Sandbox Code Playgroud)
有多种方法:
EXEC sp_server_info 2
Run Code Online (Sandbox Code Playgroud)
或者
SELECT @@version
Run Code Online (Sandbox Code Playgroud)
或者
SELECT serverproperty('ProductVersion')
Run Code Online (Sandbox Code Playgroud)
您还可以这样做:
DECLARE @ver nvarchar(128)
SET @ver = CAST(serverproperty('ProductVersion') AS nvarchar)
SET @ver = SUBSTRING(@ver, 1, CHARINDEX('.', @ver) - 1)
IF ( @ver = '8' )
SELECT 'SQL Server 2000'
ELSE IF ( @ver = '9' )
SELECT 'SQL Server 2005'
ELSE
SELECT 'Unsupported SQL Server Version'
Run Code Online (Sandbox Code Playgroud)
更多信息请访问:http://blog.devstone.com/aaron/default,date,2006-12-15.aspx