I favolosi 40 Template
9 months ago
LIKE many Sql programmers I prefer the SQL approach to solve most of the problems I face doing my job. Now I'm trying to share scripts and other things.
'UPDATE STATISTICS [' + SCHEMA_NAME(T.schema_id) + '].[' + T.name + ']'
FROMsys.tables T
WHERENOT EXISTS
(SELECT TOP 1 1
FROM
sys.extended_properties EP
WHERE
EP.major_id = T.object_id AND
EP.name = 'microsoft_database_tools_support'
) AND
T.is_ms_shipped = 0ORDER BY 1
( [row_id] [bigint] NOT NULL, [object_id] [int] NOT NULL, [name] [nvarchar](128) NOT NULL, [type] [char](2) NOT NULL, CONSTRAINT [PK_missing_idx] PRIMARY KEY CLUSTERED ([row_id]))INSERT INTO dbo.missing_idxSELECT TOP 20000 ROW_NUMBER() OVER (ORDER BY O.object_id) row_id, O.object_id, O.name, O.typeFROM sys.all_objects O CROSS JOIN sys.all_objects O1 object_id, name, typeFROM dbo.missing_idxWHERE object_id in (SELECT TOP 1 object_id FROM dbo.missing_idx)

CREATE TABLE dbo.string_row( row_id INT NOT NULL PRIMARY KEY, string VARCHAR(50), group_id INT NOT NULL)GOINSERT INTO dbo.string_row (row_id, string, group_id) VALUES(1, 'AA', 1)INSERT INTO dbo.string_row (row_id, string, group_id) VALUES(2, 'BB', 1)INSERT INTO dbo.string_row (row_id, string, group_id) VALUES(4, 'CC', 1)
INSERT INTO dbo.string_row (row_id, string, group_id) VALUES(8, 'EE', 2)INSERT INTO dbo.string_row (row_id, string, group_id) VALUES(12, 'FF', 2)INSERT INTO dbo.string_row (row_id, string, group_id) VALUES(13, 'GG', 2)DECLARE @concatenation2 VARCHAR(MAX)SET @concatenation1 = ''SET @concatenation2 = ''SELECT @concatenation1 = @concatenation1 + CASE group_id WHEN 1 THEN string ELSE '' END, @concatenation2 = @concatenation2 + CASE group_id WHEN 2 THEN string ELSE '' ENDFROM dbo.string_rowORDER BY row_id
SELECT @concatenation1 full_string, 1 group_idUNION ALLSELECT @concatenation2 full_string, 2 group_id ( row_id INT NOT NULL, full_string VARCHAR(MAX), group_id INT NOT NULL)INSERT INTO #TMP (row_id, full_string, group_id)SELECT DISTINCT 0, '', group_id FROM dbo.string_rowWHILE @@ROWCOUNT > 0BEGIN UPDATE T SET row_id = R.row_id, full_string = full_string + R.string FROM #TMP T INNER JOIN dbo.string_row R ON R.group_id = T.group_id AND R.row_id > T.row_id LEFT JOIN dbo.string_row R1 ON R1.group_id = T.group_id AND R1.row_id > R.row_id AND R1.row_id < T.row_id WHERE R1.row_id IS NULLEND
SELECT full_string, group_id FROM #TMP WITH ORDROWS (new_row_id, full_string, group_id) AS ( --remove row_id holes SELECT ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY row_id) new_row_id, string full_string, group_id FROM dbo.string_row ), CROWS (new_row_id, full_string, group_id) AS ( --get the last row in each group SELECT new_row_id, CONVERT(VARCHAR(MAX), full_string) full_string, group_id FROM ORDROWS R WHERE NOT EXISTS ( SELECT TOP 1 1 FROM ORDROWS R1 WHERE R1.group_id = R.group_id AND R1.new_row_id > R.new_row_id ) UNION ALL --add the previous row using the sequence obtained using ORDROWS CTE SELECT R.new_row_id, CONVERT(VARCHAR(MAX), R.full_string + C.full_string) full_string, R.group_id FROM ORDROWS R INNER JOIN CROWS C ON C.group_id = R.group_id AND C.new_row_id = R.new_row_id + 1 )
SELECT full_string, group_id FROM CROWS WHERE new_row_id = 1END (SELECT
R.string + ''
FROM
dbo.string_row RWHERE
R.group_id = G.group_idORDER BY R.row_id
FOR XML PATH('')
) full_string, G.group_idFROM