내 개발 환경에서 다음 세 가지 명명 규칙을 따르지 않는 현재 데이터베이스 이름을 표시하는 SQL Server 2016보기를 만드는 작업이 수행되었습니다.SQL Server보기 내에서 복잡한 문자열 패턴과 일치하는 문자열 열
세 가지 유효한 명명 규칙 나는 주어 졌어
- 'XXX_YYY_DEV'
- 'XXX_YYY_DEV-nnn.nnn.nnn'
- 'XXX_YYY_DEV-nnn.nnn.nnn.nnn을'
여기에서 XXX
은 최소 1 자 이상의 영숫자로 이루어진 가변 길이 문자열이고 YYY
은 길이가 1 자 이상이고 다른 모든 가변 길이 문자열입니다 nnn
은 다른 nnn과 동일 할 수있는 가변 길이 숫자 값 (최소값 = '0')입니다.
예 :
데이터베이스 이름
- 'Dinky_cu5tomer_DEV'
- '5aussage_Orders_DEV-12.3.0'
- 'TExt1_text2_DEV-999.57.1.57'
가 준수 표준은보기에서 제외되어야합니다.
데이터베이스 이름
- '_cu5tomer_DV'
- '5aussage_Orders_Now_DEV-12.3.0'
- 'TExt1_text2_DEV-999.99a.1.57'
그래서 표준을 준수하지 않는
나는 구성 요소 부분을 분리하려고 시도했지만 숫자 부분은 정말 저를 곤란하게합니다.
숫자 비트를 주석 처리 한 결과는 여기까지입니다.
CREATE View vw_NonStandardDatabaseNames
AS
SELECT DISTINCT
X.DBRealName AS 'Non-Standard Name',*
FROM
(SELECT
db.name AS [DBRealName],
-- Client
(CASE
WHEN PATINDEX ('%[_]%', db.name) > 1
THEN SUBSTRING(db.name,1,PATINDEX ('%[_]%', db.name)-1)
ELSE ''
END) AS [Client],
-- First Underscore
PATINDEX ('%[_]%', db.name) AS [Pos_1],
(CASE
WHEN PATINDEX ('%[_]%', db.name) > 0
THEN '_'
ELSE ''
END) AS [US_1],
(CASE
WHEN PATINDEX ('%[_]DEV%', db.name) > 0
THEN '_'
ELSE ''
END) AS [US_2],
-- Database Name
(CASE
WHEN PATINDEX ('%[_]%', db.name) <= 1
THEN '' -- No Underscore 1
WHEN PATINDEX ('%[_]DEV%', db.name) <= 3
THEN '' -- No Client
WHEN PATINDEX ('%[_]%', db.name) = PATINDEX ('%[_]DEV%', db.name)
THEN '' -- No first underscore only second one + System Name.
WHEN PATINDEX ('%[_]%', db.name)+1 = PATINDEX ('%[_]DEV%', db.name)
THEN '' -- First underscore but no DB Name then second underscore + System Name.
WHEN PATINDEX ('%[_]%', db.name) > 1
AND PATINDEX ('%[_]DEV%', db.name) > 3
THEN SUBSTRING(db.name, PATINDEX ('%[_]%', db.name)+1,(PATINDEX('%[_]DEV%', db.name)-(PATINDEX ('%[_]%', db.name)+1)))
ELSE ''
END) AS [DBName],
-- Second Underscore
PATINDEX ('%[_]DEV%', db.name) AS [Pos2],
-- System Name
(CASE
WHEN PATINDEX ('%[_]DEV%', db.name) > 0 THEN 'DEV'
ELSE ''
END) AS [System_Name],
-- System Name
(CASE
WHEN PATINDEX ('%[_]DEV-%', db.name) > 0 THEN PATINDEX ('%[_]DEV-%', db.name) + 4
ELSE 0
END) AS [POS_3]
---- Hyphen after 'DEV' System Name
-- (CASE
-- WHEN db.name LIKE '%[_]DEV-%' THEN '-'
-- ELSE ''
--END) AS [Hyphen]
---- Version Major
--'' AS [VersionMajor],
--'' AS [Dot1],
---- Version Minor
--'' AS [VersionMinor],
--'' AS [Dot2],
---- Revision
--'' AS [Revision],
--'' AS [Dot3],
---- Build
--'' AS [Build]
FROM sys.databases db
WHERE db.name NOT IN ('master','model','msdb','tempdb')
--UNION
--as above but with 3 digit Version
--UNION
--as above but with 4 digit version
) X
WHERE
X.DBRealName != Concat(X.Client, X.US_1, X.DBName, X.US_2, X.System_Name) --, X.Hyphen, X.VersionMajor, X.Dot1, X.VersionMinor, X.Dot2, X.Revision, X.Dot3, X.Build
나는 그 제임스를 살펴볼 것입니다. 감사. –