2017-05-19 29 views
0

我有一個關於SQL Server的問題:如何動態更改數據庫名稱並使用一個select和insert statment來使用存儲過程加載數據。使用存儲過程在SQL Server中動態更改數據庫

如何使用insert和select語句更改數據庫名稱,同時將表數據加載到另一個表中?

這裏將每個數據庫名相關表加載到與數據庫名相關的目標表中。

即數據庫:測試和源表:EMP目標表:emptarget這裏EMP表中的記錄加載到emptarget類似於另一個數據庫

數據庫名稱的信息保持一個表。

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 

表1:源:emp和datbasename:測試

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 

目標表:emptarget和數據庫名稱:測試

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 

目標表:emptarget和數據庫名稱:TEST1

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

最後需要加載數據像下面

數據庫:試驗和表:emptarget

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

數據庫:TEST1和表:emptarget

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

我試圖像下面

USE [test] 
GO 

insert into emptarget 
select * from emp 

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

在這裏,我不希望單獨運行兩個查詢。我需要使用單選和插入語句來運行查詢以加載數據庫的數據對應表。

請告訴我如何寫查詢在SQL Server

回答

0

來實現這一目標任務,其實我不知道你爲什麼不這樣做的想法。

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

所以我想你只是想要一個查詢來做到這一點。

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') 
相關問題