Сравнение количества строк двух таблиц для каждой базы данных в экземпляре - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть один экземпляр sql со многими базами данных. В одном запросе я хочу посчитать строки двух таблиц в каждой базе данных, Магазины и местоположения, чтобы иметь возможность сравнивать значения.

Пока у меня есть следующий запрос:

SELECT ('SELECT COUNT(1) FROM [' + name + '].[abc].[Shops]') as shopCount, 
       ('SELECT COUNT(1) FROM [' + name + '].[def].[Locations]') as locationCount,
       name as DB
FROM sys.databases 
WHERE OBJECT_ID('[' + name + '].[abc].[Shops]') IS NOT NULL AND 
       OBJECT_ID('[' + name + '].[def].[Locations]' ) IS NOT NULL

Что приводит к следующему выводу

shopCount                                      | locationsCount                                     | DB
------------------------------------------------------------------------------------------------------------------
SELECT COUNT(1) FROM [database1].[abc].[Shops] | SELECT COUNT(1) FROM [database1].[def].[Locations] | database1
------------------------------------------------------------------------------------------------------------------
SELECT COUNT(1) FROM [database2].[abc].[Shops] | SELECT COUNT(1) FROM [database2].[def].[Locations] | database2

Совершенно очевидно, что я не выполняю строки как запрос, но не могу понять, как это сделать.

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Примерно так:

DECLARE @DynamicTSQLStatement NVARCHAR(MAX);

CREATE TABLE #DataSource
(
    [shopCount] INT
   ,[locationCount] INT
   ,[database] SYSNAME
);

SET @DynamicTSQLStatement = STUFF
(
    (
        SELECT ';INSERT INTO  #DataSource SELECT (SELECT COUNT(1) FROM [' + name + '].[abc].[Shops]), (SELECT COUNT(1) FROM [' + name + '].[def].[Locations]), ''' + name +'''' 
        FROM sys.databases          
        WHERE OBJECT_ID('[' + name + '].[abc].[Shops]') IS NOT NULL AND 
               OBJECT_ID('[' + name + '].[def].[Locations]' ) IS NOT NULL
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)')
    ,1
    ,1
    ,''
);



EXEC sp_executesql @DynamicTSQLStatement;

SELECT *
FROM #DataSource;

DROP TABLE #DataSource;
0 голосов
/ 01 ноября 2019

Вы пытаетесь сделать некоторые динамические sql. Прочитайте здесь: http://www.sqlservertutorial.net/sql-server-stored-procedures/sql-server-dynamic-sql/

первый пример, кажется, то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...