使用存储过程在SQL Server中动态更改数据库

我有一个关于SQL Server的问题:如何动态更改数据库名称,并使用一个select和insert statment来使用存储过程加载数据。

如何使用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:source:emp和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

目标表:emptarget和databasename: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

目标表:emptarget和databasename: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中完成此任务


其实我不知道你为什么不这样做。

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')
链接地址: http://www.djcxy.com/p/95695.html

上一篇: Change database dynamically in SQL Server using a stored procedure

下一篇: How to save single quote with different languages in sql server