2017-09-04 103 views
0

我做的SQL Server的安全性無序排列的自動化和我需要從@@versionSQL Server數據提取

select @@version 

輸出

Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) 
Jun 17 2016 19:14:09 
Copyright (c) Microsoft Corporation 
Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600:) (Hypervisor) 

我需要提取信息提取安全公告版(KB3171021)從上面輸出。

這是我試過

DECLARE @version NVARCHAR(400) 

SELECT @version = REVERSE(SUBSTRING(@@version, 0, 50)) 

SELECT @version 

SELECT SUBSTRING(@version, (CHARINDEX('(', REVERSE(@@VERSION))),(CHARINDEX(')', REVERSE(@@VERSION)))) 

我沒有得到期望的輸出。你能幫忙嗎?

+0

試試[這個答案](https://stackoverflow.com/a/59457),你需要改變參數 –

+1

[@@版本可能根本不包含它...](http://rextester.com/CCDBE39117) –

+0

的確,我正在獲得'Microsoft SQL Server 2012(SP1) - ...' – Veljko89

回答

1

那麼,正如我在評論中的rextester鏈接所示,@@version可能不包含您正在查找的數據。

你可能也想看看SERVERPROPERTY

但是,如果你的系統將始終包含它,最簡單的方法來提取這將是獲得第二個括號內的數據:

;WITH CTE AS 
(
    SELECT CHARINDEX('(', @@Version, CHARINDEX('(', @@Version) + 1) As SecondOpen, 
      CHARINDEX(')', @@Version, CHARINDEX(')', @@Version) + 1) As SecondClose 
) 

SELECT SUBSTRING(@@Version, SecondOpen + 1, SecondClose - SecondOpen - 1) 
FROM CTE 

結果:

KB3171021 

You can see a live demo on rextester.

+0

是的,但是當我使用這個SELECT @@ Version As Original ('(',@@ Version,(CHARINDEX('(',@@ Version)+1))+1,(CHARINDEX('(',@@ Version,CHARINDEX(' (',@@ Version)+ 1) - CHARINDEX(')',@@ Version,CHARINDEX(')',@@ Version))+ 1)-1)作爲KB, @@ Version作爲ActualVersion,它不給我的結果,我只是結合了一切查詢 – deepti

+0

謝謝它的工作 – deepti