mirror of
				https://github.com/chartdb/chartdb.git
				synced 2025-11-04 05:53:15 +00:00 
			
		
		
		
	fix(mssql-import): improve script readability by adding edition comment (#572)
* fix(mssql-import): improve script readability by adding edition comment * fix(mssql-import): fixing issues with import query
This commit is contained in:
		@@ -1,23 +1,26 @@
 | 
			
		||||
import { DatabaseEdition } from '@/lib/domain/database-edition';
 | 
			
		||||
 | 
			
		||||
const sqlServerQuery = `WITH fk_info AS (
 | 
			
		||||
const sqlServerQuery = `${`/* SQL Server 2017 and above edition (14.0, 15.0, 16.0, 17.0)*/`}
 | 
			
		||||
WITH fk_info AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        JSON_QUERY(
 | 
			
		||||
            '[' + STRING_AGG(
 | 
			
		||||
            N'[' + STRING_AGG(
 | 
			
		||||
                CONVERT(nvarchar(max),
 | 
			
		||||
                JSON_QUERY(N'{"schema": "' + COALESCE(REPLACE(tp_schema.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            '", "table": "' + COALESCE(REPLACE(tp.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            '", "column": "' + COALESCE(REPLACE(cp.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            '", "foreign_key_name": "' + COALESCE(REPLACE(fk.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            '", "reference_schema": "' + COALESCE(REPLACE(tr_schema.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            '", "reference_table": "' + COALESCE(REPLACE(tr.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            '", "reference_column": "' + COALESCE(REPLACE(cr.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            '", "fk_def": "FOREIGN KEY (' + COALESCE(REPLACE(cp.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            ') REFERENCES ' + COALESCE(REPLACE(tr.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            '(' + COALESCE(REPLACE(cr.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            ') ON DELETE ' + fk.delete_referential_action_desc COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                            ' ON UPDATE ' + fk.update_referential_action_desc COLLATE SQL_Latin1_General_CP1_CI_AS + '"}')
 | 
			
		||||
                ), ','
 | 
			
		||||
                    JSON_QUERY(N'{
 | 
			
		||||
                        "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(tp_schema.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "table": "' + STRING_ESCAPE(COALESCE(REPLACE(tp.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "column": "' + STRING_ESCAPE(COALESCE(REPLACE(cp.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "foreign_key_name": "' + STRING_ESCAPE(COALESCE(REPLACE(fk.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "reference_schema": "' + STRING_ESCAPE(COALESCE(REPLACE(tr_schema.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "reference_table": "' + STRING_ESCAPE(COALESCE(REPLACE(tr.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "reference_column": "' + STRING_ESCAPE(COALESCE(REPLACE(cr.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "fk_def": "FOREIGN KEY (' + STRING_ESCAPE(COALESCE(REPLACE(cp.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        ') REFERENCES ' + STRING_ESCAPE(COALESCE(REPLACE(tr.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '(' + STRING_ESCAPE(COALESCE(REPLACE(cr.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        ') ON DELETE ' + STRING_ESCAPE(fk.delete_referential_action_desc, 'json') +
 | 
			
		||||
                        ' ON UPDATE ' + STRING_ESCAPE(fk.update_referential_action_desc, 'json') +
 | 
			
		||||
                    '"}') COLLATE DATABASE_DEFAULT
 | 
			
		||||
                ), N','
 | 
			
		||||
            ) + N']'
 | 
			
		||||
        ) AS all_fks_json
 | 
			
		||||
    FROM sys.foreign_keys AS fk
 | 
			
		||||
@@ -31,153 +34,138 @@ const sqlServerQuery = `WITH fk_info AS (
 | 
			
		||||
), pk_info AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        JSON_QUERY(
 | 
			
		||||
            '[' + STRING_AGG(
 | 
			
		||||
            N'[' +
 | 
			
		||||
                STRING_AGG(
 | 
			
		||||
                    CONVERT(nvarchar(max),
 | 
			
		||||
                JSON_QUERY(N'{"schema": "' + COALESCE(REPLACE(pk.TABLE_SCHEMA, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                '", "table": "' + COALESCE(REPLACE(pk.TABLE_NAME, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                '", "column": "' + COALESCE(REPLACE(pk.COLUMN_NAME, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                '", "pk_def": "PRIMARY KEY (' + pk.COLUMN_NAME COLLATE SQL_Latin1_General_CP1_CI_AS + ')"}')
 | 
			
		||||
                ), ','
 | 
			
		||||
                        JSON_QUERY(N'{
 | 
			
		||||
                            "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(pk.TABLE_SCHEMA, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "table": "' + STRING_ESCAPE(COALESCE(REPLACE(pk.TABLE_NAME, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "column": "' + STRING_ESCAPE(COALESCE(REPLACE(pk.COLUMN_NAME, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "pk_def": "PRIMARY KEY (' + STRING_ESCAPE(pk.COLUMN_NAME, 'json') + N')"}') COLLATE DATABASE_DEFAULT
 | 
			
		||||
                        ), N','
 | 
			
		||||
                ) + N']'
 | 
			
		||||
        ) AS all_pks_json
 | 
			
		||||
    FROM
 | 
			
		||||
        (
 | 
			
		||||
    FROM (
 | 
			
		||||
        SELECT
 | 
			
		||||
            kcu.TABLE_SCHEMA,
 | 
			
		||||
            kcu.TABLE_NAME,
 | 
			
		||||
            kcu.COLUMN_NAME
 | 
			
		||||
            FROM
 | 
			
		||||
                INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
 | 
			
		||||
            JOIN
 | 
			
		||||
                INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
 | 
			
		||||
        FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
 | 
			
		||||
        JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
 | 
			
		||||
            ON kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
 | 
			
		||||
            AND kcu.CONSTRAINT_SCHEMA = tc.CONSTRAINT_SCHEMA
 | 
			
		||||
            WHERE
 | 
			
		||||
                tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
 | 
			
		||||
        WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
 | 
			
		||||
    ) pk
 | 
			
		||||
),
 | 
			
		||||
cols AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        JSON_QUERY(
 | 
			
		||||
            '[' + STRING_AGG(
 | 
			
		||||
        JSON_QUERY(N'[' +
 | 
			
		||||
            STRING_AGG(
 | 
			
		||||
                CONVERT(nvarchar(max),
 | 
			
		||||
                JSON_QUERY('{"schema": "' + COALESCE(REPLACE(cols.TABLE_SCHEMA, '"', ''), '') +
 | 
			
		||||
                '", "table": "' + COALESCE(REPLACE(cols.TABLE_NAME, '"', ''), '') +
 | 
			
		||||
                '", "name": "' + COALESCE(REPLACE(cols.COLUMN_NAME, '"', ''), '') +
 | 
			
		||||
                '", "ordinal_position": "' + CAST(cols.ORDINAL_POSITION AS NVARCHAR(MAX)) +
 | 
			
		||||
                '", "type": "' + LOWER(cols.DATA_TYPE) +
 | 
			
		||||
                '", "character_maximum_length": "' +
 | 
			
		||||
                    COALESCE(CAST(cols.CHARACTER_MAXIMUM_LENGTH AS NVARCHAR(MAX)), 'null') +
 | 
			
		||||
                '", "precision": ' +
 | 
			
		||||
                    JSON_QUERY(N'{
 | 
			
		||||
                        "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(cols.TABLE_SCHEMA, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "table": "' + STRING_ESCAPE(COALESCE(REPLACE(cols.TABLE_NAME, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "name": "' + STRING_ESCAPE(COALESCE(REPLACE(cols.COLUMN_NAME, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "ordinal_position": ' + CAST(cols.ORDINAL_POSITION AS NVARCHAR(MAX)) +
 | 
			
		||||
                        ', "type": "' + STRING_ESCAPE(LOWER(cols.DATA_TYPE), 'json') +
 | 
			
		||||
                        '", "character_maximum_length": ' +
 | 
			
		||||
                            CASE
 | 
			
		||||
                        WHEN cols.DATA_TYPE IN ('numeric', 'decimal') THEN
 | 
			
		||||
                            CONCAT('{"precision":', COALESCE(CAST(cols.NUMERIC_PRECISION AS NVARCHAR(MAX)), 'null'),
 | 
			
		||||
                            ',"scale":', COALESCE(CAST(cols.NUMERIC_SCALE AS NVARCHAR(MAX)), 'null'), '}')
 | 
			
		||||
                        ELSE
 | 
			
		||||
                            'null'
 | 
			
		||||
                                WHEN cols.CHARACTER_MAXIMUM_LENGTH IS NULL THEN 'null'
 | 
			
		||||
                                ELSE CAST(cols.CHARACTER_MAXIMUM_LENGTH AS NVARCHAR(MAX))
 | 
			
		||||
                            END +
 | 
			
		||||
                ', "nullable": ' +
 | 
			
		||||
                    CASE WHEN cols.IS_NULLABLE = 'YES' THEN 'true' ELSE 'false' END +
 | 
			
		||||
                ', "default": "' +
 | 
			
		||||
                    COALESCE(REPLACE(CAST(cols.COLUMN_DEFAULT AS NVARCHAR(MAX)), '"', '\\"'), '') +
 | 
			
		||||
                '", "collation": "' +
 | 
			
		||||
                    COALESCE(cols.COLLATION_NAME, '') +
 | 
			
		||||
                '"}')
 | 
			
		||||
                ), ','
 | 
			
		||||
            ) + ']'
 | 
			
		||||
        ) AS all_columns_json
 | 
			
		||||
    FROM
 | 
			
		||||
        INFORMATION_SCHEMA.COLUMNS cols
 | 
			
		||||
    WHERE
 | 
			
		||||
        cols.TABLE_CATALOG = DB_NAME()
 | 
			
		||||
                        ', "precision": ' +
 | 
			
		||||
                            CASE
 | 
			
		||||
                                WHEN cols.DATA_TYPE IN ('numeric', 'decimal')
 | 
			
		||||
                                THEN '{"precision":' + COALESCE(CAST(cols.NUMERIC_PRECISION AS NVARCHAR(MAX)), 'null') +
 | 
			
		||||
                                     ',"scale":' + COALESCE(CAST(cols.NUMERIC_SCALE AS NVARCHAR(MAX)), 'null') + '}'
 | 
			
		||||
                                ELSE 'null'
 | 
			
		||||
                            END +
 | 
			
		||||
                        ', "nullable": ' + CASE WHEN cols.IS_NULLABLE = 'YES' THEN 'true' ELSE 'false' END +
 | 
			
		||||
                        ', "default": ' +
 | 
			
		||||
                            '"' + STRING_ESCAPE(COALESCE(REPLACE(CAST(cols.COLUMN_DEFAULT AS NVARCHAR(MAX)), '"', '\\"'), ''), 'json') + '"' +
 | 
			
		||||
                        ', "collation": ' + CASE
 | 
			
		||||
                            WHEN cols.COLLATION_NAME IS NULL THEN 'null'
 | 
			
		||||
                            ELSE '"' + STRING_ESCAPE(cols.COLLATION_NAME, 'json') + '"'
 | 
			
		||||
                        END +
 | 
			
		||||
                    N'}') COLLATE DATABASE_DEFAULT
 | 
			
		||||
                ), N','
 | 
			
		||||
            ) +
 | 
			
		||||
        N']') AS all_columns_json
 | 
			
		||||
    FROM INFORMATION_SCHEMA.COLUMNS cols
 | 
			
		||||
    WHERE cols.TABLE_CATALOG = DB_NAME()
 | 
			
		||||
),
 | 
			
		||||
indexes AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        '[' + STRING_AGG(
 | 
			
		||||
        N'[' +
 | 
			
		||||
            STRING_AGG(
 | 
			
		||||
                CONVERT(nvarchar(max),
 | 
			
		||||
            JSON_QUERY(
 | 
			
		||||
                N'{"schema": "' + COALESCE(REPLACE(s.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                '", "table": "' + COALESCE(REPLACE(t.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                '", "name": "' + COALESCE(REPLACE(i.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                '", "column": "' + COALESCE(REPLACE(c.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                '", "index_type": "' + LOWER(i.type_desc) COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                    JSON_QUERY(N'{
 | 
			
		||||
                        "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(s.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "table": "' + STRING_ESCAPE(COALESCE(REPLACE(t.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "name": "' + STRING_ESCAPE(COALESCE(REPLACE(i.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "column": "' + STRING_ESCAPE(COALESCE(REPLACE(c.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "index_type": "' + STRING_ESCAPE(LOWER(i.type_desc), 'json') +
 | 
			
		||||
                        '", "unique": ' + CASE WHEN i.is_unique = 1 THEN 'true' ELSE 'false' END +
 | 
			
		||||
                ', "direction": "' + CASE WHEN ic.is_descending_key = 1 THEN 'desc' ELSE 'asc' END COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                        ', "direction": "' + CASE WHEN ic.is_descending_key = 1 THEN 'desc' ELSE 'asc' END +
 | 
			
		||||
                        '", "column_position": ' + CAST(ic.key_ordinal AS nvarchar(max)) + N'}'
 | 
			
		||||
            )
 | 
			
		||||
            ), ','
 | 
			
		||||
        ) + N']' AS all_indexes_json
 | 
			
		||||
    FROM
 | 
			
		||||
        sys.indexes i
 | 
			
		||||
    JOIN
 | 
			
		||||
        sys.tables t ON i.object_id = t.object_id
 | 
			
		||||
    JOIN
 | 
			
		||||
        sys.schemas s ON t.schema_id = s.schema_id
 | 
			
		||||
    JOIN
 | 
			
		||||
        sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
 | 
			
		||||
    JOIN
 | 
			
		||||
        sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
 | 
			
		||||
    WHERE
 | 
			
		||||
        s.name LIKE '%'
 | 
			
		||||
        AND i.name IS NOT NULL
 | 
			
		||||
                    ) COLLATE DATABASE_DEFAULT
 | 
			
		||||
                ), N','
 | 
			
		||||
            ) +
 | 
			
		||||
        N']' AS all_indexes_json
 | 
			
		||||
    FROM sys.indexes i
 | 
			
		||||
    JOIN sys.tables t ON i.object_id = t.object_id
 | 
			
		||||
    JOIN sys.schemas s ON t.schema_id = s.schema_id
 | 
			
		||||
    JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
 | 
			
		||||
    JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
 | 
			
		||||
    WHERE s.name LIKE '%' AND i.name IS NOT NULL
 | 
			
		||||
),
 | 
			
		||||
tbls AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        '[' + STRING_AGG(
 | 
			
		||||
        N'[' + STRING_AGG(
 | 
			
		||||
                CONVERT(nvarchar(max),
 | 
			
		||||
            JSON_QUERY(
 | 
			
		||||
                N'{"schema": "' + COALESCE(REPLACE(aggregated.schema_name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                '", "table": "' + COALESCE(REPLACE(aggregated.table_name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                '", "row_count": "' + CAST(aggregated.row_count AS NVARCHAR(MAX)) +
 | 
			
		||||
                '", "table_type": "' + aggregated.table_type COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                '", "creation_date": "' + CONVERT(NVARCHAR(MAX), aggregated.creation_date, 120) + '"}'
 | 
			
		||||
            )
 | 
			
		||||
            ), ','
 | 
			
		||||
        ) + N']' AS all_tables_json
 | 
			
		||||
    FROM
 | 
			
		||||
        (
 | 
			
		||||
            -- Select from tables
 | 
			
		||||
                        JSON_QUERY(N'{
 | 
			
		||||
                            "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(aggregated.schema_name, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "table": "' + STRING_ESCAPE(COALESCE(REPLACE(aggregated.table_name, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "row_count": ' + CAST(aggregated.row_count AS NVARCHAR(MAX)) +
 | 
			
		||||
                            ', "table_type": "' + STRING_ESCAPE(aggregated.table_type, 'json') +
 | 
			
		||||
                            '", "creation_date": "' + CONVERT(NVARCHAR(MAX), aggregated.creation_date, 120) + N'"}'
 | 
			
		||||
                        ) COLLATE DATABASE_DEFAULT
 | 
			
		||||
                    ), N','
 | 
			
		||||
                ) +
 | 
			
		||||
        N']' AS all_tables_json
 | 
			
		||||
    FROM (
 | 
			
		||||
        SELECT
 | 
			
		||||
            COALESCE(REPLACE(s.name, '"', ''), '') AS schema_name,
 | 
			
		||||
            COALESCE(REPLACE(t.name, '"', ''), '') AS table_name,
 | 
			
		||||
            SUM(p.rows) AS row_count,
 | 
			
		||||
            t.type_desc AS table_type,
 | 
			
		||||
            t.create_date AS creation_date
 | 
			
		||||
            FROM
 | 
			
		||||
                sys.tables t
 | 
			
		||||
            JOIN
 | 
			
		||||
                sys.schemas s ON t.schema_id = s.schema_id
 | 
			
		||||
            JOIN
 | 
			
		||||
                sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0, 1)
 | 
			
		||||
            WHERE
 | 
			
		||||
                s.name LIKE '%'
 | 
			
		||||
            GROUP BY
 | 
			
		||||
                s.name, t.name, t.type_desc, t.create_date
 | 
			
		||||
        FROM sys.tables t
 | 
			
		||||
        JOIN sys.schemas s ON t.schema_id = s.schema_id
 | 
			
		||||
        JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0, 1)
 | 
			
		||||
        WHERE s.name LIKE '%'
 | 
			
		||||
        GROUP BY s.name, t.name, t.type_desc, t.create_date
 | 
			
		||||
 | 
			
		||||
        UNION ALL
 | 
			
		||||
 | 
			
		||||
            -- Select from views
 | 
			
		||||
        SELECT
 | 
			
		||||
            COALESCE(REPLACE(s.name, '"', ''), '') AS table_name,
 | 
			
		||||
            COALESCE(REPLACE(v.name, '"', ''), '') AS object_name,
 | 
			
		||||
                0 AS row_count,  -- Views don't have row counts
 | 
			
		||||
            0 AS row_count,
 | 
			
		||||
            'VIEW' AS table_type,
 | 
			
		||||
            v.create_date AS creation_date
 | 
			
		||||
            FROM
 | 
			
		||||
                sys.views v
 | 
			
		||||
            JOIN
 | 
			
		||||
                sys.schemas s ON v.schema_id = s.schema_id
 | 
			
		||||
            WHERE
 | 
			
		||||
                s.name LIKE '%'
 | 
			
		||||
        FROM sys.views v
 | 
			
		||||
        JOIN sys.schemas s ON v.schema_id = s.schema_id
 | 
			
		||||
        WHERE s.name LIKE '%'
 | 
			
		||||
    ) AS aggregated
 | 
			
		||||
),
 | 
			
		||||
views AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        '[' + STRING_AGG(
 | 
			
		||||
                CONVERT(nvarchar(max),
 | 
			
		||||
            JSON_QUERY(
 | 
			
		||||
                N'{"schema": "' + STRING_ESCAPE(COALESCE(s.name, ''), 'json') +
 | 
			
		||||
                '", "view_name": "' + STRING_ESCAPE(COALESCE(v.name, ''), 'json') +
 | 
			
		||||
                JSON_QUERY(N'{
 | 
			
		||||
                    "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(s.name, '"', ''), ''), 'json') +
 | 
			
		||||
                    '", "view_name": "' + STRING_ESCAPE(COALESCE(REPLACE(v.name, '"', ''), ''), 'json') +
 | 
			
		||||
                    '", "view_definition": "' +
 | 
			
		||||
                    STRING_ESCAPE(
 | 
			
		||||
                        CAST(
 | 
			
		||||
@@ -186,135 +174,123 @@ views AS (
 | 
			
		||||
                            'xs:base64Binary(sql:column("DefinitionBinary"))',
 | 
			
		||||
                            'VARCHAR(MAX)'
 | 
			
		||||
                        ), 'json') +
 | 
			
		||||
                '"}'
 | 
			
		||||
            )
 | 
			
		||||
            ), ','
 | 
			
		||||
                    N'"}') COLLATE DATABASE_DEFAULT
 | 
			
		||||
                ), N','
 | 
			
		||||
        ) + N']' AS all_views_json
 | 
			
		||||
    FROM
 | 
			
		||||
        sys.views v
 | 
			
		||||
    JOIN
 | 
			
		||||
        sys.schemas s ON v.schema_id = s.schema_id
 | 
			
		||||
    JOIN
 | 
			
		||||
        sys.sql_modules m ON v.object_id = m.object_id
 | 
			
		||||
    FROM sys.views v
 | 
			
		||||
    JOIN sys.schemas s ON v.schema_id = s.schema_id
 | 
			
		||||
    JOIN sys.sql_modules m ON v.object_id = m.object_id
 | 
			
		||||
    CROSS APPLY
 | 
			
		||||
        (SELECT CONVERT(VARBINARY(MAX), m.definition) AS DefinitionBinary) AS bin
 | 
			
		||||
    WHERE
 | 
			
		||||
        s.name LIKE '%'
 | 
			
		||||
    WHERE s.name LIKE '%'
 | 
			
		||||
)
 | 
			
		||||
SELECT JSON_QUERY(
 | 
			
		||||
        N'{"fk_info": ' + ISNULL((SELECT cast(all_fks_json as nvarchar(max)) FROM fk_info), N'[]') +
 | 
			
		||||
    N'{
 | 
			
		||||
        "fk_info": ' + ISNULL((SELECT cast(all_fks_json as nvarchar(max)) FROM fk_info), N'[]') +
 | 
			
		||||
        ', "pk_info": ' + ISNULL((SELECT cast(all_pks_json as nvarchar(max)) FROM pk_info), N'[]') +
 | 
			
		||||
        ', "columns": ' + ISNULL((SELECT cast(all_columns_json as nvarchar(max)) FROM cols), N'[]') +
 | 
			
		||||
        ', "indexes": ' + ISNULL((SELECT cast(all_indexes_json as nvarchar(max)) FROM indexes), N'[]') +
 | 
			
		||||
        ', "tables": ' + ISNULL((SELECT cast(all_tables_json as nvarchar(max)) FROM tbls), N'[]') +
 | 
			
		||||
        ', "views": ' + ISNULL((SELECT cast(all_views_json as nvarchar(max)) FROM views), N'[]') +
 | 
			
		||||
        ', "database_name": "' + DB_NAME() + '"' +
 | 
			
		||||
        ', "version": ""}'
 | 
			
		||||
        ', "database_name": "' + STRING_ESCAPE(DB_NAME(), 'json') +
 | 
			
		||||
        '", "version": ""
 | 
			
		||||
    }'
 | 
			
		||||
) AS metadata_json_to_import;
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
const sqlServer2016AndBelowQuery = `WITH fk_info AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        JSON_QUERY(
 | 
			
		||||
            '[' + ISNULL(
 | 
			
		||||
const sqlServer2016AndBelowQuery = `${`/* SQL Server 2016 and below edition (13.0, 12.0, 11.0..) */`}
 | 
			
		||||
WITH fk_info AS (
 | 
			
		||||
    SELECT  JSON_QUERY('[' +
 | 
			
		||||
        ISNULL(
 | 
			
		||||
            STUFF((
 | 
			
		||||
                SELECT ',' +
 | 
			
		||||
                    CONVERT(nvarchar(max),
 | 
			
		||||
                        JSON_QUERY(N'{"schema": "' + COALESCE(REPLACE(tp_schema.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '", "table": "' + COALESCE(REPLACE(tp.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '", "column": "' + COALESCE(REPLACE(cp.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '", "foreign_key_name": "' + COALESCE(REPLACE(fk.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '", "reference_schema": "' + COALESCE(REPLACE(tr_schema.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '", "reference_table": "' + COALESCE(REPLACE(tr.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '", "reference_column": "' + COALESCE(REPLACE(cr.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '", "fk_def": "FOREIGN KEY (' + COALESCE(REPLACE(cp.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    ') REFERENCES ' + COALESCE(REPLACE(tr.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '(' + COALESCE(REPLACE(cr.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    ') ON DELETE ' + fk.delete_referential_action_desc COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    ' ON UPDATE ' + fk.update_referential_action_desc COLLATE SQL_Latin1_General_CP1_CI_AS + '"}')
 | 
			
		||||
                        JSON_QUERY(N'{
 | 
			
		||||
                            "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(tp_schema.name, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "table": "' + STRING_ESCAPE(COALESCE(REPLACE(tp.name, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "column": "' + STRING_ESCAPE(COALESCE(REPLACE(cp.name, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "foreign_key_name": "' + STRING_ESCAPE(COALESCE(REPLACE(fk.name, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "reference_schema": "' + STRING_ESCAPE(COALESCE(REPLACE(tr_schema.name, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "reference_table": "' + STRING_ESCAPE(COALESCE(REPLACE(tr.name, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "reference_column": "' + STRING_ESCAPE(COALESCE(REPLACE(cr.name, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "fk_def": "FOREIGN KEY (' + STRING_ESCAPE(COALESCE(REPLACE(cp.name, '"', ''), ''), 'json') +
 | 
			
		||||
                            ') REFERENCES ' + STRING_ESCAPE(COALESCE(REPLACE(tr.name, '"', ''), ''), 'json') +
 | 
			
		||||
                            '(' + STRING_ESCAPE(COALESCE(REPLACE(cr.name, '"', ''), ''), 'json') +
 | 
			
		||||
                            ') ON DELETE ' + STRING_ESCAPE(fk.delete_referential_action_desc, 'json') +
 | 
			
		||||
                            ' ON UPDATE ' + STRING_ESCAPE(fk.update_referential_action_desc, 'json') +
 | 
			
		||||
                        '"}') COLLATE DATABASE_DEFAULT
 | 
			
		||||
                    )
 | 
			
		||||
                    FROM
 | 
			
		||||
                        sys.foreign_keys AS fk
 | 
			
		||||
                    JOIN
 | 
			
		||||
                        sys.foreign_key_columns AS fkc ON fk.object_id = fkc.constraint_object_id
 | 
			
		||||
                    JOIN
 | 
			
		||||
                        sys.tables AS tp ON fkc.parent_object_id = tp.object_id
 | 
			
		||||
                    JOIN
 | 
			
		||||
                        sys.schemas AS tp_schema ON tp.schema_id = tp_schema.schema_id
 | 
			
		||||
                    JOIN
 | 
			
		||||
                        sys.columns AS cp ON fkc.parent_object_id = cp.object_id AND fkc.parent_column_id = cp.column_id
 | 
			
		||||
                    JOIN
 | 
			
		||||
                        sys.tables AS tr ON fkc.referenced_object_id = tr.object_id
 | 
			
		||||
                    JOIN
 | 
			
		||||
                        sys.schemas AS tr_schema ON tr.schema_id = tr_schema.schema_id
 | 
			
		||||
                    JOIN
 | 
			
		||||
                        sys.columns AS cr ON fkc.referenced_object_id = cr.object_id AND fkc.referenced_column_id = cr.column_id
 | 
			
		||||
                FROM sys.foreign_keys AS fk
 | 
			
		||||
                JOIN sys.foreign_key_columns AS fkc ON fk.object_id = fkc.constraint_object_id
 | 
			
		||||
                JOIN sys.tables AS tp ON fkc.parent_object_id = tp.object_id
 | 
			
		||||
                JOIN sys.schemas AS tp_schema ON tp.schema_id = tp_schema.schema_id
 | 
			
		||||
                JOIN sys.columns AS cp ON fkc.parent_object_id = cp.object_id AND fkc.parent_column_id = cp.column_id
 | 
			
		||||
                JOIN sys.tables AS tr ON fkc.referenced_object_id = tr.object_id
 | 
			
		||||
                JOIN sys.schemas AS tr_schema ON tr.schema_id = tr_schema.schema_id
 | 
			
		||||
                JOIN sys.columns AS cr ON fkc.referenced_object_id = cr.object_id AND fkc.referenced_column_id = cr.column_id
 | 
			
		||||
                FOR XML PATH('')
 | 
			
		||||
            ), 1, 1, ''), '')
 | 
			
		||||
            + N']'
 | 
			
		||||
        ) AS all_fks_json
 | 
			
		||||
    + N']') AS all_fks_json
 | 
			
		||||
),
 | 
			
		||||
pk_info AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        JSON_QUERY(
 | 
			
		||||
            '[' + ISNULL(
 | 
			
		||||
                STUFF((
 | 
			
		||||
    SELECT  JSON_QUERY('[' +
 | 
			
		||||
                ISNULL(STUFF((
 | 
			
		||||
                    SELECT ',' +
 | 
			
		||||
                        CONVERT(nvarchar(max),
 | 
			
		||||
                        JSON_QUERY(N'{"schema": "' + COALESCE(REPLACE(pk.TABLE_SCHEMA, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '", "table": "' + COALESCE(REPLACE(pk.TABLE_NAME, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '", "column": "' + COALESCE(REPLACE(pk.COLUMN_NAME, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                                    '", "pk_def": "PRIMARY KEY (' + pk.COLUMN_NAME COLLATE SQL_Latin1_General_CP1_CI_AS + ')"}')
 | 
			
		||||
                        JSON_QUERY(N'{
 | 
			
		||||
                            "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(pk.TABLE_SCHEMA, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "table": "' + STRING_ESCAPE(COALESCE(REPLACE(pk.TABLE_NAME, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "column": "' + STRING_ESCAPE(COALESCE(REPLACE(pk.COLUMN_NAME, '"', ''), ''), 'json') +
 | 
			
		||||
                            '", "pk_def": "PRIMARY KEY (' + STRING_ESCAPE(pk.COLUMN_NAME, 'json') + N')"}') COLLATE DATABASE_DEFAULT
 | 
			
		||||
                        )
 | 
			
		||||
                    FROM
 | 
			
		||||
                        (
 | 
			
		||||
                            SELECT
 | 
			
		||||
                                kcu.TABLE_SCHEMA,
 | 
			
		||||
                            SELECT  kcu.TABLE_SCHEMA,
 | 
			
		||||
                                    kcu.TABLE_NAME,
 | 
			
		||||
                                    kcu.COLUMN_NAME
 | 
			
		||||
                            FROM
 | 
			
		||||
                                INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
 | 
			
		||||
                            JOIN
 | 
			
		||||
                                INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
 | 
			
		||||
                            FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
 | 
			
		||||
                            JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
 | 
			
		||||
                                ON kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
 | 
			
		||||
                                AND kcu.CONSTRAINT_SCHEMA = tc.CONSTRAINT_SCHEMA
 | 
			
		||||
                            WHERE
 | 
			
		||||
                                tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
 | 
			
		||||
                            WHERE   tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
 | 
			
		||||
                        ) pk
 | 
			
		||||
                    FOR XML PATH('')
 | 
			
		||||
                ), 1, 1, ''), '')
 | 
			
		||||
            + N']'
 | 
			
		||||
        ) AS all_pks_json
 | 
			
		||||
    + N']') AS all_pks_json
 | 
			
		||||
),
 | 
			
		||||
cols AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        JSON_QUERY(
 | 
			
		||||
            '[' + ISNULL(
 | 
			
		||||
    SELECT  JSON_QUERY('[' +
 | 
			
		||||
        ISNULL(
 | 
			
		||||
            STUFF((
 | 
			
		||||
                SELECT ',' +
 | 
			
		||||
                    CONVERT(nvarchar(max),
 | 
			
		||||
                        JSON_QUERY('{"schema": "' + COALESCE(REPLACE(cols.TABLE_SCHEMA, '"', ''), '') +
 | 
			
		||||
                                    '", "table": "' + COALESCE(REPLACE(cols.TABLE_NAME, '"', ''), '') +
 | 
			
		||||
                                    '", "name": "' + COALESCE(REPLACE(cols.COLUMN_NAME, '"', ''), '') +
 | 
			
		||||
                                    '", "ordinal_position": "' + CAST(cols.ORDINAL_POSITION AS NVARCHAR(MAX)) +
 | 
			
		||||
                                    '", "type": "' + LOWER(cols.DATA_TYPE) +
 | 
			
		||||
                                    '", "character_maximum_length": "' +
 | 
			
		||||
                                        COALESCE(CAST(cols.CHARACTER_MAXIMUM_LENGTH AS NVARCHAR(MAX)), 'null') +
 | 
			
		||||
                                    '", "precision": ' +
 | 
			
		||||
                    JSON_QUERY('{
 | 
			
		||||
                                "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(cols.TABLE_SCHEMA, '"', ''), ''), 'json') +
 | 
			
		||||
                                '", "table": "' + STRING_ESCAPE(COALESCE(REPLACE(cols.TABLE_NAME, '"', ''), ''), 'json') +
 | 
			
		||||
                                '", "name": "' + STRING_ESCAPE(COALESCE(REPLACE(cols.COLUMN_NAME, '"', ''), ''), 'json') +
 | 
			
		||||
                                '", "ordinal_position": ' + CAST(cols.ORDINAL_POSITION AS NVARCHAR(MAX)) +
 | 
			
		||||
                                ', "type": "' + STRING_ESCAPE(LOWER(cols.DATA_TYPE), 'json') +
 | 
			
		||||
                                '", "character_maximum_length": ' +
 | 
			
		||||
                                    CASE
 | 
			
		||||
                                            WHEN cols.DATA_TYPE IN ('numeric', 'decimal') THEN
 | 
			
		||||
                                                CONCAT('{"precision":', COALESCE(CAST(cols.NUMERIC_PRECISION AS NVARCHAR(MAX)), 'null'),
 | 
			
		||||
                                                ',"scale":', COALESCE(CAST(cols.NUMERIC_SCALE AS NVARCHAR(MAX)), 'null'), '}')
 | 
			
		||||
                                            ELSE
 | 
			
		||||
                                                'null'
 | 
			
		||||
                                        WHEN cols.CHARACTER_MAXIMUM_LENGTH IS NULL THEN 'null'
 | 
			
		||||
                                        ELSE CAST(cols.CHARACTER_MAXIMUM_LENGTH AS NVARCHAR(MAX))
 | 
			
		||||
                                    END +
 | 
			
		||||
                                    ', "nullable": ' +
 | 
			
		||||
                                        CASE WHEN cols.IS_NULLABLE = 'YES' THEN 'true' ELSE 'false' END +
 | 
			
		||||
                                    ', "default": "' +
 | 
			
		||||
                                        COALESCE(REPLACE(CAST(cols.COLUMN_DEFAULT AS NVARCHAR(MAX)), '"', '"'), '') +
 | 
			
		||||
                                    '", "collation": "' +
 | 
			
		||||
                                        COALESCE(cols.COLLATION_NAME, '') +
 | 
			
		||||
                                    '"}')
 | 
			
		||||
                                ', "precision": ' +
 | 
			
		||||
                                    CASE
 | 
			
		||||
                                        WHEN cols.DATA_TYPE IN ('numeric', 'decimal')
 | 
			
		||||
                                        THEN '{"precision":' + COALESCE(CAST(cols.NUMERIC_PRECISION AS NVARCHAR(MAX)), 'null') +
 | 
			
		||||
                                             ',"scale":' + COALESCE(CAST(cols.NUMERIC_SCALE AS NVARCHAR(MAX)), 'null') + '}'
 | 
			
		||||
                                        ELSE 'null'
 | 
			
		||||
                                    END +
 | 
			
		||||
                                ', "nullable": ' + CASE WHEN cols.IS_NULLABLE = 'YES' THEN 'true' ELSE 'false' END +
 | 
			
		||||
                                ', "default": ' +
 | 
			
		||||
                                    '"' + STRING_ESCAPE(COALESCE(REPLACE(CAST(cols.COLUMN_DEFAULT AS NVARCHAR(MAX)), '"', '\\"'), ''), 'json') + '"' +
 | 
			
		||||
                                ', "collation": ' +
 | 
			
		||||
                                    CASE
 | 
			
		||||
                                        WHEN cols.COLLATION_NAME IS NULL THEN 'null'
 | 
			
		||||
                                        ELSE '"' + STRING_ESCAPE(cols.COLLATION_NAME, 'json') + '"'
 | 
			
		||||
                                    END +
 | 
			
		||||
                                N'}')
 | 
			
		||||
                    )
 | 
			
		||||
                FROM
 | 
			
		||||
                    INFORMATION_SCHEMA.COLUMNS cols
 | 
			
		||||
@@ -322,8 +298,7 @@ cols AS (
 | 
			
		||||
                    cols.TABLE_CATALOG = DB_NAME()
 | 
			
		||||
                FOR XML PATH('')
 | 
			
		||||
            ), 1, 1, ''), '')
 | 
			
		||||
            + ']'
 | 
			
		||||
        ) AS all_columns_json
 | 
			
		||||
    + ']') AS all_columns_json
 | 
			
		||||
),
 | 
			
		||||
indexes AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
@@ -331,29 +306,23 @@ indexes AS (
 | 
			
		||||
            STUFF((
 | 
			
		||||
                SELECT ',' +
 | 
			
		||||
                    CONVERT(nvarchar(max),
 | 
			
		||||
                    JSON_QUERY(
 | 
			
		||||
                        N'{"schema": "' + COALESCE(REPLACE(s.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                        '", "table": "' + COALESCE(REPLACE(t.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                        '", "name": "' + COALESCE(REPLACE(i.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                        '", "column": "' + COALESCE(REPLACE(c.name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                        '", "index_type": "' + LOWER(i.type_desc) COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                    JSON_QUERY(N'{
 | 
			
		||||
                        "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(s.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "table": "' + STRING_ESCAPE(COALESCE(REPLACE(t.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "name": "' + STRING_ESCAPE(COALESCE(REPLACE(i.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "column": "' + STRING_ESCAPE(COALESCE(REPLACE(c.name, '"', ''), ''), 'json') +
 | 
			
		||||
                        '", "index_type": "' + STRING_ESCAPE(LOWER(i.type_desc), 'json') +
 | 
			
		||||
                        '", "unique": ' + CASE WHEN i.is_unique = 1 THEN 'true' ELSE 'false' END +
 | 
			
		||||
                        ', "direction": "' + CASE WHEN ic.is_descending_key = 1 THEN 'desc' ELSE 'asc' END COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                        ', "direction": "' + CASE WHEN ic.is_descending_key = 1 THEN 'desc' ELSE 'asc' END +
 | 
			
		||||
                        '", "column_position": ' + CAST(ic.key_ordinal AS nvarchar(max)) + N'}'
 | 
			
		||||
                    ) COLLATE DATABASE_DEFAULT
 | 
			
		||||
                )
 | 
			
		||||
                )
 | 
			
		||||
                FROM
 | 
			
		||||
                    sys.indexes i
 | 
			
		||||
                JOIN
 | 
			
		||||
                    sys.tables t ON i.object_id = t.object_id
 | 
			
		||||
                JOIN
 | 
			
		||||
                    sys.schemas s ON t.schema_id = s.schema_id
 | 
			
		||||
                JOIN
 | 
			
		||||
                    sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
 | 
			
		||||
                JOIN
 | 
			
		||||
                    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
 | 
			
		||||
                WHERE
 | 
			
		||||
                    s.name LIKE '%'
 | 
			
		||||
                FROM sys.indexes i
 | 
			
		||||
                JOIN sys.tables t ON i.object_id = t.object_id
 | 
			
		||||
                JOIN sys.schemas s ON t.schema_id = s.schema_id
 | 
			
		||||
                JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
 | 
			
		||||
                JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
 | 
			
		||||
                WHERE s.name LIKE '%'
 | 
			
		||||
                        AND i.name IS NOT NULL
 | 
			
		||||
                FOR XML PATH('')
 | 
			
		||||
            ), 1, 1, ''), '')
 | 
			
		||||
@@ -365,12 +334,12 @@ tbls AS (
 | 
			
		||||
        STUFF((
 | 
			
		||||
            SELECT ',' +
 | 
			
		||||
                CONVERT(nvarchar(max),
 | 
			
		||||
                JSON_QUERY(
 | 
			
		||||
                    N'{"schema": "' + COALESCE(REPLACE(aggregated.schema_name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                    '", "table": "' + COALESCE(REPLACE(aggregated.object_name, '"', ''), '') COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                    '", "row_count": "' + CAST(aggregated.row_count AS NVARCHAR(MAX)) +
 | 
			
		||||
                    '", "object_type": "' + aggregated.object_type COLLATE SQL_Latin1_General_CP1_CI_AS +
 | 
			
		||||
                    '", "creation_date": "' + CONVERT(NVARCHAR(MAX), aggregated.creation_date, 120) + '"}'
 | 
			
		||||
                JSON_QUERY(N'{
 | 
			
		||||
                    "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(aggregated.schema_name, '"', ''), ''), 'json') +
 | 
			
		||||
                    '", "table": "' + STRING_ESCAPE(COALESCE(REPLACE(aggregated.table_name, '"', ''), ''), 'json') +
 | 
			
		||||
                    '", "row_count": ' + CAST(aggregated.row_count AS NVARCHAR(MAX)) +
 | 
			
		||||
                    ', "table_type": "' + STRING_ESCAPE(aggregated.table_type, 'json') +
 | 
			
		||||
                    '", "creation_date": "' + CONVERT(NVARCHAR(MAX), aggregated.creation_date, 120) + N'"}'
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
            FROM
 | 
			
		||||
@@ -378,20 +347,15 @@ tbls AS (
 | 
			
		||||
                    -- Select from tables
 | 
			
		||||
                    SELECT
 | 
			
		||||
                        COALESCE(REPLACE(s.name, '"', ''), '') AS schema_name,
 | 
			
		||||
                        COALESCE(REPLACE(t.name, '"', ''), '') AS object_name,
 | 
			
		||||
                        COALESCE(REPLACE(t.name, '"', ''), '') AS table_name,
 | 
			
		||||
                        SUM(p.rows) AS row_count,
 | 
			
		||||
                        t.type_desc AS object_type,
 | 
			
		||||
                        t.type_desc AS table_type,
 | 
			
		||||
                        t.create_date AS creation_date
 | 
			
		||||
                    FROM
 | 
			
		||||
                        sys.tables t
 | 
			
		||||
                    JOIN
 | 
			
		||||
                        sys.schemas s ON t.schema_id = s.schema_id
 | 
			
		||||
                    JOIN
 | 
			
		||||
                        sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0, 1)
 | 
			
		||||
                    WHERE
 | 
			
		||||
                        s.name LIKE '%'
 | 
			
		||||
                    GROUP BY
 | 
			
		||||
                        s.name, t.name, t.type_desc, t.create_date
 | 
			
		||||
                    FROM sys.tables t
 | 
			
		||||
                    JOIN sys.schemas s ON t.schema_id = s.schema_id
 | 
			
		||||
                    JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0, 1)
 | 
			
		||||
                    WHERE s.name LIKE '%'
 | 
			
		||||
                    GROUP BY s.name, t.name, t.type_desc, t.create_date
 | 
			
		||||
 | 
			
		||||
                    UNION ALL
 | 
			
		||||
 | 
			
		||||
@@ -402,12 +366,9 @@ tbls AS (
 | 
			
		||||
                        0 AS row_count,  -- Views don't have row counts
 | 
			
		||||
                        'VIEW' AS object_type,
 | 
			
		||||
                        v.create_date AS creation_date
 | 
			
		||||
                    FROM
 | 
			
		||||
                        sys.views v
 | 
			
		||||
                    JOIN
 | 
			
		||||
                        sys.schemas s ON v.schema_id = s.schema_id
 | 
			
		||||
                    WHERE
 | 
			
		||||
                        s.name LIKE '%'
 | 
			
		||||
                    FROM sys.views v
 | 
			
		||||
                    JOIN sys.schemas s ON v.schema_id = s.schema_id
 | 
			
		||||
                    WHERE s.name LIKE '%'
 | 
			
		||||
                ) AS aggregated
 | 
			
		||||
            FOR XML PATH('')
 | 
			
		||||
        ), 1, 1, ''), '')
 | 
			
		||||
@@ -417,18 +378,18 @@ views AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        '[' +
 | 
			
		||||
        (
 | 
			
		||||
            SELECT
 | 
			
		||||
                STUFF((
 | 
			
		||||
            SELECT  STUFF((
 | 
			
		||||
                        SELECT ',' + CONVERT(nvarchar(max),
 | 
			
		||||
                            JSON_QUERY(
 | 
			
		||||
                            N'{"schema": "' + COALESCE(REPLACE(s.name, '"', ''), '') +
 | 
			
		||||
                            '", "view_name": "' + COALESCE(REPLACE(v.name, '"', ''), '') +
 | 
			
		||||
                                N'{
 | 
			
		||||
                                "schema": "' + STRING_ESCAPE(COALESCE(REPLACE(s.name, '"', ''), ''), 'json') +
 | 
			
		||||
                                '", "view_name": "' + STRING_ESCAPE(COALESCE(REPLACE(v.name, '"', ''), ''), 'json') +
 | 
			
		||||
                                '", "view_definition": "' +
 | 
			
		||||
                                CAST(
 | 
			
		||||
                                    (
 | 
			
		||||
                                        SELECT CAST(OBJECT_DEFINITION(v.object_id) AS VARBINARY(MAX)) FOR XML PATH('')
 | 
			
		||||
                                    ) AS NVARCHAR(MAX)
 | 
			
		||||
                            ) + '"}'
 | 
			
		||||
                                ) + N'"}'
 | 
			
		||||
                            )
 | 
			
		||||
                        )
 | 
			
		||||
                        FROM
 | 
			
		||||
@@ -441,14 +402,16 @@ views AS (
 | 
			
		||||
        ) + ']' AS all_views_json
 | 
			
		||||
)
 | 
			
		||||
SELECT JSON_QUERY(
 | 
			
		||||
        N'{"fk_info": ' + ISNULL((SELECT cast(all_fks_json as nvarchar(max)) FROM fk_info), N'[]') +
 | 
			
		||||
    N'{
 | 
			
		||||
        "fk_info": ' + ISNULL((SELECT cast(all_fks_json as nvarchar(max)) FROM fk_info), N'[]') +
 | 
			
		||||
        ', "pk_info": ' + ISNULL((SELECT cast(all_pks_json as nvarchar(max)) FROM pk_info), N'[]') +
 | 
			
		||||
        ', "columns": ' + ISNULL((SELECT cast(all_columns_json as nvarchar(max)) FROM cols), N'[]') +
 | 
			
		||||
        ', "indexes": ' + ISNULL((SELECT cast(all_indexes_json as nvarchar(max)) FROM indexes), N'[]') +
 | 
			
		||||
        ', "tables": ' + ISNULL((SELECT cast(all_objects_json as nvarchar(max)) FROM tbls), N'[]') +
 | 
			
		||||
        ', "views": ' + ISNULL((SELECT cast(all_views_json as nvarchar(max)) FROM views), N'[]') +
 | 
			
		||||
        ', "database_name": "' + DB_NAME() + '"' +
 | 
			
		||||
        ', "version": ""}'
 | 
			
		||||
        ', "version": ""
 | 
			
		||||
    }'
 | 
			
		||||
) AS metadata_json_to_import;`;
 | 
			
		||||
 | 
			
		||||
export const getSqlServerQuery = (
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user