|
USE [TestMD]
GO
/****** Object: StoredProcedure [dbo].[Select2MD] Script Date: 27/03/2024 07:50:32 ******/
SET ANSI_DEFAULTS ON
GO
ALTER PROCEDURE [dbo].[Select2MD]
/*
Author: Tomaz Kastrun and David Tallett
Date: 26.Mar.2024
Description: Turns result set of selected table into Markdown suitable for use on StackOverflow
Usage:
EXEC dbo.select2MD
@table_name = 'TestForMD'
,@schema_name = 'dbo'
DECLARE @text NVARCHAR(100)
SET @text = 'This is line 1.' + CHAR(13) + 'This is line 2.'
SELECT @text
stackoverflow.com/questions/31057/how-to-insert-a-line-break-in-a-sql-server-varchar-nvarchar-string
Tools > Options > Query Results > SQL Server > Results to Grid > Retain CR/LF on copy or save
SQL Server Management Studio 19.3.4.0
ToDO:
*/ @table_name VARCHAR(200)
,@schema_name VARCHAR(20)
AS
BEGIN
SET NOCOUNT ON;
-- get the columns of the table
SELECT
c.Column_name
,c.Ordinal_position
,c.is_nullable
,c.Data_Type
INTO #temp
FROM INFORMATION_SCHEMA.TABLES AS t
JOIN INFORMATION_SCHEMA.COLUMNS AS c
ON t.table_name = c.table_name
AND t.table_schema = c.table_schema
AND t.table_Catalog = c.table_Catalog
WHERE
t.table_type = 'BASE TABLE'
AND t.Table_name = @table_name
AND t.table_schema = @schema_name
DECLARE @MD NVARCHAR(MAX)
-- header | name | name2 | name3 | name4 | name5 | name6
DECLARE @header VARCHAR(MAX)
SELECT @header = COALESCE(@header + ' | ','') + column_name
FROM #temp
ORDER BY Ordinal_position ASC
SELECT @header = ' | ' + @header + ' | '
-- delimiter | --- | --- | --- | --- | --- | ---
DECLARE @nof_columns INT = (SELECT MAX(Ordinal_position) FROM #temp)
DECLARE @firstLine NVARCHAR(MAX) = (SELECT REPLICATE('| --- ',@nof_columns) + '|')
SET @MD = @header + CHAR(13) + CHAR(10) + CHAR(32) + @firstLine + CHAR(13) + CHAR(10)
-- body
DECLARE @body_sql NVARCHAR(MAX)
SET @body_sql = 'SELECT
''| '' + CAST('
DECLARE @i INT = 1
WHILE @i <= @nof_columns
BEGIN
DECLARE @w VARCHAR(1000) = (SELECT column_name FROM #temp WHERE Ordinal_position = @i)
SET @body_sql = @body_sql + @w + ' AS VARCHAR(MAX))+ '' | '' + CAST( '
SET @i = @i + 1
END
SET @body_sql = (SELECT SUBSTRING(@body_sql,1, LEN(@body_sql)-8))
SET @body_sql = @body_sql + ' FROM ' + @table_name
DECLARE @bodyTable TABLE(MD VARCHAR(MAX))
INSERT INTO @BodyTable
EXEC sp_executesql @body_sql
DECLARE @body2 NVARCHAR(MAX)
SELECT @body2 = COALESCE(@body2 + ' ', ' ') + MD + CHAR(13) + CHAR(10)
FROM @bodyTable
SET @MD = @MD + @body2
SELECT @MD
END;
|
|