문제

액세스하는 SQL 서버가 SQL Express인지 여부를 감지하는 안전 (즉, 일관성 있고 강력한) 방법이 필요합니다. 나는 이미 연결 문자열이 있고 TSQL을 실행하는 데 필요한 모든 라이브러리가 있기 때문에 TSQL 에서이 작업을 수행 할 수 있기를 원한다고 생각합니다 (WMI가 설치/실행 중인지 여부에 대한 문제를 피하는 데 도움이되어야합니다. 레지스트리 등에 액세스 할 권한).

누구 든지이 작업을 수행하는 방법을 알고 있습니까?

감사.

추신 : 기본적으로 4GB 제한에 대해 데이터베이스 크기를 모니터링하고 접근 할 때 조치를 취할 수 있도록이 작업을 수행하고 싶습니다. 그러나 전체 SQL Server 에디션에서 실행중인 경우 코드를 사용하고 싶지 않습니다. (실용적) 하드 코딩 된 한계가 없기 때문에 걱정하십시오. 내 프로그램에 수동 설정을 할 수는 있지만 코드가 올바른 일을 자동으로 수행 한 경우 훨씬 더 좋을 것입니다. 따라서 서버가 'Express'에디션인지 아닌지 알아야합니다.

도움이 되었습니까?

해결책

여러 가지 방법이 있습니다.

EXEC sp_server_info 2

또는

SELECT @@version

또는

SELECT serverproperty('ProductVersion')

당신은 또한 이것을 할 수 있습니다 :

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'

추가 정보 : http://blog.devstone.com/aaron/default,2006-12-15.aspx

다른 팁

사용

SELECT SERVERPROPERTY('EditionID')

또는

SELECT SERVERPROPERTY('Edition')

어떤 버전의 SQLServer가 실행 중인지 감지합니다.

http://msdn.microsoft.com/en-us/library/ms174396.aspx

그렇지 않은 경우 0이되고 0이 아닌 경우 (126) 인 경우 0이 반환됩니다.

select charindex('Express Edition',@@version)

부울 맥락에서의 예 :

if (select charindex('Express Edition',@@version)) > 0
    begin
        print 'Express edition!'
    end
else
    begin
        print 'Not Express edition!'
    end

당신이 사용할 수있는 SERVERPROPERTY('Edition') "Express Edition"을 반환합니다.

그만큼 SERVERPROPERTY 기능 다른 여러 답변에서 이미 언급되었지만 문자열에 "Express Edition"이 포함되어 있는지 확인하는 것보다 더 나은 솔루션이 있습니다. EngineEdition 반환하는 인수 int 값.

링크에서 인용 :

엔진

서버에 설치된 SQL Server 인스턴스의 데이터베이스 엔진 에디션.

1 = 개인 또는 데스크탑 엔진 (SQL Server 2005 이상 버전에서는 사용할 수 없습니다.)

2 = 표준 (이것은 표준, 웹 및 비즈니스 인텔리전스를 위해 반환됩니다.)

3 = 엔터프라이즈 (이것은 평가, 개발자 및 두 엔터프라이즈 에디션을 위해 반환됩니다.)

4 = Express (이것은 Express로 반환되고, 도구가있는 Express 및 고급 서비스가있는 Express)

5 = SQL 데이터베이스

6- SQL 데이터웨어 하우스

기본 데이터 유형 : int

따라서 다음과 같은 Express Edition을 확인할 수 있습니다.

if SERVERPROPERTY('EngineEdition') = 4
    begin
        select 'Express'
    end
else
    begin
        select 'not Express'
    end

크기를 모니터링하지 않고 한계에 도달하면 SQL Server Express에서 어떻게됩니까? 먼저 경고가 있습니까? 이벤트 로그의 이벤트?

그렇다면 SQL Server가 경고를 발행 한 다음 듣는 것이 좋습니다. 디스크가 가득 차면 SQL Server 엔터프라이즈 설치에 대해서도 마찬가지입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top