Сохранение нескольких данных из разных баз данных в одну базу данных SQL и C # - PullRequest
0 голосов
/ 22 декабря 2018

Вот актуальная фиктивная программа

enter image description here

Могу я задать вопрос по этому поводу, как сохранить данные из разных баз данных в одну базу данных (MainDatabase).Это возможно верно?

Мне просто нужна идея создать простую программу, которая может получать данные из нескольких баз данных с тем же именем таблицы, например, transactionTBL, а затем сохранять их в одной базе данных с такими же столбцами и значением.Кстати, я пытался использовать хранимую процедуру - но это должен быть объект, а не varchar или строка.

@DATABASE varchar(50)

INSERT INTO UserControlTenant.dbo.tenantData (tenant_name, receipt_id, amount, date, time)
    SELECT * 
    FROM ___.dbo.transactiondata 

Пример:

База данных1

~transactiontbl~

ID
receiptID
amount
date time

База данных2

~transactiontbl~

ID
receiptID
amount
date time

- MainDB

~transactiontbl~

ID
receiptID
amount
date time

Ответы [ 3 ]

0 голосов
/ 22 декабря 2018

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

DECLARE @Database NVARCHAR(500) ;
DECLARE @Query NVARCHAR(1000);

DECLARE looper CURSOR FOR 
SELECT [name] FROM sys.databases 
WHERE [name] IN ('test','test1') --you could edit your where clause for the 
                                   database 
                                 --you need to fetch data from 
OPEN looper    

FETCH NEXT FROM looper     
INTO @Database   

WHILE @@FETCH_STATUS = 0    
BEGIN    


    SET @Query = '
    INSERT INTO UserControlTenant.dbo.tenantData (tenant_name, receipt_id, 
    amount, date, time)
    SELECT '+@Database +',receiptID, amount,date, time FROM 
    '+@Database+'.dbo.transactiondata  
    '

    EXEC (@Query)

FETCH NEXT FROM looper     
INTO @Database    

END     
CLOSE looper;    
DEALLOCATE looper; 
0 голосов
/ 22 декабря 2018

Это может быть достигнуто многими способами.Производительность и продолжительность должны учитываться во всех сценариях.Наилучшим подходом является сделать это на стороне SQL с помощью запроса «открытой вставки» связанного сервера.Другой может быть сделан с использованием динамического запроса со всеми значениями базы данных, объединенными в хранимой процедуре.

0 голосов
/ 22 декабря 2018

если базы данных находятся на одном сервере, вы можете использовать выбор вставки на основе объединения

INSERT INTO UserControlTenant.dbo.tenantData (tenant_name, receipt_id, amount, date, time)
select  'db1_tenant_name', receiptID, amount,date, time
from db1.dbo.tenantData 
UNION ALL 
select  'db2_tenant_name', receiptID, amount,date, time
from db2.dbo.tenantData 
UNION ALL
....
select  'dbn_tenant_name', receiptID, amount,date, time
from dbn.dbo.tenantData 

использовать UNION ALL, если вы хотите, чтобы все значения строк использовали UNION, если вы хотите только различный результат

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