파싱? ...컴마로 자르기 응용편...
SQL은 집합처럼 보이는 순차처리 어플일 뿐이다....집합 집합 집합 하고 2,3년차 꼬셔 사고를 말리지 말자..
아래는 재미있는 문자열 장난이다. 심심할때 한번 보길 바란다.
IF OBJECT_ID ('USP_SPLITSTRING') IS NULL
EXEC('CREATE PROC USP_SPLITSTRING AS SELECT 1 ')
GO
ALTER PROC USP_SPLITSTRING
(
@INPUTV VARCHAR(MAX) ='1,2,3,0,'
, @STRINGCNT INT = 4 -- 주던지 내부에서 LEN 해서 구하던지.......
)
AS
SET NOCOUNT ON
DECLARE @I1 VARCHAR (10), @I2 VARCHAR (10), @I3 VARCHAR (10), @I4 VARCHAR (10), @I5 VARCHAR (10)
,@I6 VARCHAR (10), @I7 VARCHAR (10), @I8 VARCHAR (10), @I9 VARCHAR (10), @I10 VARCHAR (10)
IF @STRINGCNT <= 10
BEGIN
SELECT
@I1 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I2 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I3 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I4 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I5 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I6 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I7 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I8 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I9 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
, @I10 = SUBSTRING(@INPUTV, 0, CHARINDEX(',', @INPUTV)), @INPUTV = SUBSTRING(@INPUTV, CHARINDEX(',', @INPUTV)+1, 90000000000000)
SELECT *
FROM (VALUES (@I1), (@I2), (@I3), (@I4), (@I5), (@I6), (@I7), (@I8), (@I9), (@I10)) V (INPUTV)
WHERE INPUTV <> ''
END ELSE BEGIN
PRINT 'WHILE 로 계속 돌거라....끝날때까지 '
END
GO
EXEC USP_SPLITSTRING '1,2,2,0,1,32,4,2,12222222,11,', 10 -- ROW 로 만드는데 약 수백 US 가 걸린다.
GO
EXEC USP_SPLITSTRING '1,2,2,0,1,32,4,2,12222222,11,32123,2,32,3,3,211123,', 16 -- 끝날때까지 돌거라~
GO
--1. 10개 파라메터로 호출
--2. 넘는것은 따로 호출
--3. 기타...등등
xevent 만들때 쓸 것
SELECT P.NAME PACKAGE_NAME, O.NAME OBJECT_NAME, OBJECT_TYPE
, OC.NAME OBJECT_COLUMNS_NAME, CASE COLUMN_TYPE WHEN 'DATA' THEN '=' when 'customizable' then '=(1)' ELSE '' END PREDICATE_SRC
, OC.TYPE_NAME OBJECT_COLUMN_TYPE_NAME, OC.COLUMN_TYPE OBJECT_COLUMN_TYPE
, MV.MAP_KEY MAP_VALUES_KEY, MV.MAP_VALUE MAP_VALUES_MAP_VALUE
FROM SYS.DM_XE_PACKAGES P
JOIN SYS.DM_XE_OBJECTS O
ON P.GUID = O.PACKAGE_GUID
LEFT JOIN SYS.DM_XE_OBJECT_COLUMNS OC
ON O.NAME = OC.OBJECT_NAME
AND O.PACKAGE_GUID = OC.OBJECT_PACKAGE_GUID
LEFT JOIN SYS.DM_XE_MAP_VALUES MV
ON OC.OBJECT_PACKAGE_GUID = MV.OBJECT_PACKAGE_GUID
AND OC.TYPE_NAME = MV.NAME
-- AND OC.TYPE_NAME ='WAIT_TYPES'
-- WHERE MV.NAME = '%RECOMPILE_CAUSE%'
WHERE O.NAME LIKE '%file_read%'
ORDER BY O.NAME
, CASE OC.COLUMN_TYPE WHEN 'READONLY' THEN 1 WHEN 'CUSTOMIZABLE' THEN 2 WHEN 'DATA' THEN 3 ELSE NULL END
, OC.NAME
, MV.MAP_KEY
OPTION (HASH JOIN)
SELECT DISTINCT OBJECT_TYPE FROM SYS.DM_XE_OBJECTS
SELECT * FROM SYS.DM_XE_OBJECTS WHERE NAME LIKE '%COMPILE%'
SELECT * FROM SYS.DM_XE_OBJECT_COLUMNS WHERE NAME LIKE '%COMPILE%'
SELECT * FROM SYS.DM_XE_OBJECTS WHERE OBJECT_TYPE ='ACTION'
SELECT * FROM SYS.DM_XE_OBJECTS WHERE OBJECT_TYPE ='PRED_SOURCE' ORDER BY NAME
declare @keyword varchar(100) = 'file'
select * from sys.dm_xe_objects where name like '%'+@keyword+'%' or description like '%'+@keyword+'%'
select * from sys.dm_xe_object_columns where name like '%'+@keyword+'%' or type_name like '%'+@keyword+'%'
select * from sys.dm_xe_map_values where name like '%'+@keyword+'%' or map_value like '%'+@keyword+'%'