2017-05-19 2 views
0

Ich habe eine Frage zu SQL Server: Wie dynamisch ändern Datenbankname und verwenden Sie eine auswählen und einfügen, um Daten mit einer gespeicherten Prozedur zu laden.Ändern der Datenbank dynamisch in SQL Server mithilfe einer gespeicherten Prozedur

Wie ändere ich den Datenbanknamen mit der Anweisung insert und select, während Tabellendaten in eine andere Tabelle geladen werden?

Hier wird jede mit dem Datenbanknamen in Beziehung stehende Tabelle in die mit der Datenbank in Beziehung stehende Zieltabelle geladen.

d.h Datenbank: Test und Quelltabelle: emp Zieltabelle ist: emptarget hier emp Tabellensätze emptarget in einer anderen Datenbanken ähnlich laden in

Datenbanknamen Informationen eine Tabelle halten.

USE [test] 
GO 

CREATE TABLE [dbo].[databaseinformation] 
(
    [id] [int] NULL, 
    [databasename] [varchar](50) NULL 
) ON [PRIMARY] 
GO 

INSERT [dbo].[databaseinformation] ([id], [databasename]) 
VALUES (1, N'test'), (2, N'test1') 
GO 

Tabelle 1: Quelle: emp und datbasename: test

USE [test] 
CREATE TABLE [dbo].[emp] 
(
    [id] [int] NULL, 
    [name] [varchar](50) NULL, 
    [sal] [int] NULL 
) 

INSERT [dbo].[emp] ([id], [name], [sal]) 
VALUES (19, N'hd', 40), (1, N'g', 10), 
     (9, N'dk', 90), (80, N'dhe', 80) 
GO 

Zieltabelle: emptarget und database: test

USE [test] 
CREATE TABLE [dbo].[emptarget] 
(
    [id] [int] NULL, 
    [name] [varchar](50) NULL, 
    [sal] [int] NULL 
) 

----table 2: emp and databasename: test1 
USE [test] 
CREATE TABLE [dbo].[emp] 
(
    [id] [int] NULL, 
    [name] [varchar](50) NULL, 
    [sal] [int] NULL 
) 

INSERT [dbo].[emp] ([id], [name], [sal]) 
VALUES (50, N'kl', 80), 39, N'abc', 10) 
go 

Zieltabelle: emptarget und database: test1

USE [test1] 
CREATE TABLE [dbo].[emptarget] 
(
    [id] [int] NULL, 
    [name] [varchar](50) NULL, 
    [sal] [int] NULL 
) 

Endlich brauchen Test und Tabelle: emptarget

id |name |sal 
19 |hd |40 
1 |g |10 
9 |dk |90 
80 |dhe |80 

Datenbank: test1 und Tabelle: unter

Datenbank zu laden Daten wie emptarget

id |name |sal 
50 |kl |80 
39 |abc |10 

Ich habe versucht, wie unten

USE [test] 
GO 

insert into emptarget 
select * from emp 

USE [test1] 
GO 
insert into emptarget 
select * from emp 

Here I Ich möchte nicht zwei Abfragen getrennt ausführen. Ich muss Abfragen mit einzelnen Select und Insert-Anweisung ausführen, um Daten correspong Tabellen mit Datenbanken zu laden.

Bitte sagen Sie mir, wie Abfrage zu schreiben, diese Aufgabe in SQL Server

Antwort

0

Eigentlich habe keine Ahnung, ich achive darüber, warum Sie tun dies nicht.

insert into test.emptarget select * from test.emp; 
insert into test1.emptarget select * from test1.emp; 

Also ich denke, Sie wollen nur eine Abfrage, dies zu tun.

create procedure emptoemptarget (@DBName nvarchar(10)) 
as 
begin 
    declare @sql nvarchar(1000) 

    set @sql = 'insert into ' + @DBName + '.emptarget select * from ' + @DBName + '.emp' 

    exec (@sql) 
end 


select dbo.emptoemptarget(name) from sys.databases where name in ('test','test1') 
Verwandte Themen