Q&A for designers and implementers of computer programming languages
CREATE TABLE #results (site NVARCHAR(250), postid INT, questionid INT, body NVARCHAR(MAX), type NVARCHAR(50), score INT, tags NVARCHAR(250), userid INT, displayname NVARCHAR(40), creationdate DATETIME, title NVARCHAR(250)); DECLARE @sql NVARCHAR(MAX) = ''; SELECT @sql = @sql + IIF(LEN(@sql) > 1, 'UNION ALL', 'INSERT INTO #results') + N' SELECT ''' + name + ''', p.Id, CASE p.PostTypeId WHEN 1 THEN p.Id WHEN 2 THEN p.ParentId ELSE NULL END, p.Body, CASE p.PostTypeId WHEN 1 THEN ''Question'' WHEN 2 THEN ''Answer'' ELSE ''PostType = '' + CAST(p.PostTypeId AS NVARCHAR) END, p.Score, COALESCE(p.Tags, q.Tags), p.OwnerUserId, p.OwnerDisplayName, p.CreationDate, COALESCE(p.Title, q.Title) FROM ' + QUOTENAME(name) + '.dbo.Posts AS p LEFT OUTER JOIN ' + QUOTENAME(name) + '.dbo.Posts AS q ON p.ParentId = q.Id WHERE p.Body COLLATE SQL_Latin1_General_CP1_CI_AS LIKE ''%' + ##query:string## + '%'' ' FROM sys.databases WHERE database_id > 5 AND name LIKE '%.Meta'; -- execute it EXEC (@sql); -- Site details, cf. https://meta.stackexchange.com/a/359795/295232 CREATE TABLE #Sites (URL NVARCHAR(100), SiteName NVARCHAR(100), DatabaseName NVARCHAR(50)); -- fetch Markdown for post containing table with site details DECLARE @md NVARCHAR(MAX); SELECT TOP 1 @md = Text FROM [StackExchange.Meta].dbo.PostHistory WHERE PostId = 359796 AND PostHistoryTypeId = 5 ORDER BY CreationDate DESC; -- split Markdown on pipe symbol CREATE TABLE #TableEntries (ID INT IDENTITY(1, 1), Value NVARCHAR(100)); INSERT INTO #TableEntries (Value) SELECT LEFT(TRIM(VALUE), 100) FROM STRING_SPLIT(@md, '|') WHERE LEN(TRIM(REPLACE(REPLACE(VALUE, CHAR(10), ''), CHAR(13), ''))) > 0; -- 'pivot' - we have to discard the introductory text, headers and horizontal lines INSERT INTO #Sites SELECT t0.Value, t1.Value, t2.Value FROM #TableEntries AS t0 INNER JOIN #TableEntries AS t1 ON t0.Id + 1 = t1.Id INNER JOIN #TableEntries AS t2 ON t0.Id + 2 = t2.Id WHERE t0.Id >= 8 -- that's where the real content starts AND t0.Id % 3 = 2; SELECT SiteName AS 'site', URL + '/q/' + CAST(postid AS NVARCHAR) + '|' + COALESCE(title, '[LINK]') AS 'link', body, type, score, tags, creationdate, URL + '/u/' + CAST(userid AS NVARCHAR) + '|' + COALESCE(displayname, '[USER]') AS 'author' FROM #Results AS r INNER JOIN #Sites AS s ON r.Site = s.DatabaseName ORDER BY creationdate DESC; DROP TABLE #results;