Yam*_*hir 116 version sql-server-2008
确定部署的SQL Server版本的可能方法有哪些?
我试过使用SQL Server软件.我想使用命令行SQL语句来完成它.
Imr*_*ran 210
以下是查看版本的可能方法:
方法1:连接到SQL Server实例,然后运行以下查询:
Select @@version
Run Code Online (Sandbox Code Playgroud)
此查询的输出示例如下:
Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64) Mar 29 2009
10:11:52 Copyright (c) 1988-2008 Microsoft Corporation Express
Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )
Run Code Online (Sandbox Code Playgroud)
方法2:使用SQL Server Management Studio中的对象资源管理器连接到服务器.连接对象资源管理器后,它将在括号中显示版本信息,以及用于连接到特定SQL Server实例的用户名.
方法3:查看该实例的Errorlog文件的前几行.默认情况下,错误日志位于Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG和ERRORLOG.n文件中.条目可能类似于以下内容:
2011-03-27 22:31:33.50 Server Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64) Mar 29 2009 10:11:52 Copyright (c) 1988-2008 Microsoft Corporation Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )
Run Code Online (Sandbox Code Playgroud)
如您所见,此条目提供有关产品的所有必要信息,例如版本,产品级别,64位与32位,SQL Server版本以及运行SQL Server的操作系统版本.
方法4:连接到SQL Server实例,然后运行以下查询:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Run Code Online (Sandbox Code Playgroud)
注意此查询适用于SQL Server 2000或更高版本的任何实例
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)
Run Code Online (Sandbox Code Playgroud)
分别为SQL 2000,2005,2008和2008R2提供8.00,9.00,10.00和10.50.
另外,尝试系统扩展程序xp_msver.你可以像这样调用这个存储过程
exec master..xp_msver
Run Code Online (Sandbox Code Playgroud)
TL; 博士
SQLCMD -S (LOCAL) -E -V 16 -Q "IF(ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT),0)<11) RAISERROR('You need SQL 2012 or later!',16,1)"
IF ERRORLEVEL 1 GOTO :ExitFail
Run Code Online (Sandbox Code Playgroud)
这使用SQLCMD(随 SQL Server 一起提供)使用 Windows 身份验证连接到本地服务器实例,如果版本检查失败则抛出错误并返回@@ERROR作为命令行ERRORLEVEL如果 >= 16(第二行转到:ExitFail标签,如果前面提到的ERRORLEVEL是> = 1)。
手表、陷阱和更多信息
对于 SQL 2000+,您可以使用SERVERPROPERTY来确定很多此类信息。
虽然 SQL 2008+ 支持ProductMajorVersion&ProductMinorVersion属性,ProductVersion但自 2000 年以来一直存在(请记住,如果不支持属性,则函数返回NULL)。
如果您对早期版本感兴趣,您可以使用该PARSENAME函数来拆分ProductVersion(记住“部分”从右到左编号,即PARSENAME('a.b.c', 1)返回c)。
还要记住PARSENAME('a.b.c', 4)return NULL,因为 SQL 2005 及更早版本只使用了版本号中的 3 个部分!
所以对于 SQL 2008+,你可以简单地使用:
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
CAST(SERVERPROPERTY('ProductMajorVersion') AS INT) AS ProductMajorVersion,
CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;
Run Code Online (Sandbox Code Playgroud)
对于 SQL 2000-2005,您可以使用:
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) AS ProductVersion_Major,
CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 3 END) AS INT) AS ProductVersion_Minor,
CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 1 ELSE 2 END) AS INT) AS ProductVersion_Revision,
CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 0 ELSE 1 END) AS INT) AS ProductVersion_Build;
Run Code Online (Sandbox Code Playgroud)
(这PARSENAME(...,0)是一个提高可读性的黑客)
因此,检查 SQL 2000+ 版本将是:
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
CAST(SERVERPROPERTY('ProductMajorVersion') AS INT) AS ProductMajorVersion,
CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;
Run Code Online (Sandbox Code Playgroud)
如果您只对 SQL 2008+ 感兴趣,这会简单得多,因为SERVERPROPERTY('ProductMajorVersion')返回NULL早期版本,因此您可以使用:
SELECT
SERVERPROPERTY('ProductVersion') AS ProductVersion,
CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) AS ProductVersion_Major,
CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 3 END) AS INT) AS ProductVersion_Minor,
CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 1 ELSE 2 END) AS INT) AS ProductVersion_Revision,
CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 0 ELSE 1 END) AS INT) AS ProductVersion_Build;
Run Code Online (Sandbox Code Playgroud)
您可以使用ProductLevel和Edition(或EngineEdition)属性来分别确定 RTM / SP n / CTP n和 Dev / Std / Ent / 等。
IF (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) < 10) -- SQL2008
OR (
(CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) = 10) -- SQL2008
AND (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 1 END) AS INT) < 5) -- R2 (this may need to be 50)
)
RAISERROR('You need SQL 2008R2 or later!', 16, 1);
Run Code Online (Sandbox Code Playgroud)
仅供参考,主要的SQL 版本号是:
这一切也适用于 SQL Azure!
编辑: 您可能还想检查您的数据库兼容性级别,因为它可以设置为较低的兼容性。
IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
RAISERROR('You need SQL 2012 or later!', 16, 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163874 次 |
| 最近记录: |