跨数据库服务器,复制表结构及数据(procedure)

USE [PIS]
GO
/****** Object:  StoredProcedure [dbo].[SynchronizePDI]    Script Date: 2020/3/28 20:54:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
ALTER PROCEDURE  [dbo].[SynchronizePDI]
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id=object_id(‘tempdb..#tempTableName‘))
    DROP TABLE #tempTableName
    SELECT ROW_NUMBER() OVER(ORDER BY Id) AS TABLEINDEX,TableName,SynchronizeServer,SynchronizeTableName,PrimaryColumn INTO #tempTableName FROM SynchronizePDISetting t 

    DECLARE @tableIndex INT =1,@maxTableIndex INT=0,@tableName nvarchar(100)=‘‘,@SynchronizeServer nvarchar(100)=‘‘,@SynchronizeTableName nvarchar(100)=‘‘,@PrimaryColumn nvarchar(100)=‘‘
    SELECT @tableIndex=MIN(TABLEINDEX),@maxTableIndex=MAX(TABLEINDEX) FROM #tempTableName
    WHILE(@tableIndex<=@maxTableIndex)
    BEGIN

        SELECT @tableName=TableName,@SynchronizeServer=SynchronizeServer,@SynchronizeTableName = SynchronizeTableName,@PrimaryColumn=PrimaryColumn FROM #tempTableName WHERE TABLEINDEX=@tableIndex

        DECLARE @SQL NVARCHAR(4000),@maxId int
        IF object_id(@tableName,N‘U‘) IS NULL
        BEGIN
            exec (‘ select *  into  ‘+@tableName+‘ from ‘+@SynchronizeServer+‘.‘+ @SynchronizeTableName)
        END
        ELSE
        BEGIN
            Set @SQL=‘select @maxId = max(id) from ‘+@tableName
            print @SQL
            exec sp_executesql @SQL,N‘@maxId int output‘,@maxId output

            Set @SQL= ‘ insert into ‘+@tableName +‘ select * from ‘+@SynchronizeServer+‘.‘+ @SynchronizeTableName +‘ where id >‘+  convert(nvarchar(200),@maxId) +‘;‘
            print @SQL
            exec (@SQL)

        END
        --删除重复数据
        Set @SQL= ‘ delete from  ‘+@tableName +‘  where id not in (select max(id) from  ‘+@tableName +‘ group by ‘+ @PrimaryColumn+‘);‘
            print @SQL
            exec (@SQL)
        SET @tableIndex=@tableIndex+1
    END
END

原文地址:https://www.cnblogs.com/zoumm/p/12589842.html

时间: 2024-10-02 21:26:50

跨数据库服务器,复制表结构及数据(procedure)的相关文章

复制表结构和数据SQL语句

select * into 目标表名 from 源表名 insert into 目标表名(fld1, fld2) select fld1, 5 from 源表名 以上两句都是将 源表 的数据插入到 目标表,但两句又有区别的: 第一句(select into from)要求目标表不存在,因为在插入时会自动创建. 第二句(insert into select from)要求目标表存在,由于目标表已经存在,所以我们除了插入源表的字段外,还可以插入常量,如例中的:5. 1:复制表结构及数据到新表 sel

SQL复制表结构和数据

1.复制表结构和数据 select * into 目的数据库名.dbo.目的表名 from 原表名 select * into my0735home.dbo.infoMianTest from infoMian 2.复制表的一部分列(非*) select 列名1,列名2,列名3 into 目的数据库名.dbo.目的表名 from 原表名 select id,title,mtype,stype,author,tel,nr into infoMianTest2 from infomian 3备份表的

Oracle与Sql Server复制表结构及数据

1.Oracle create table 新表名 AS SELECT * FROM 源表名 2.Sql Server SELECT * into 新表名 from 源表名 Oracle与Sql Server复制表结构及数据

mysql复制表结构和数据

1.复制表结构: create table newName like oldName;//可以复制所有结构. 或者: create table newName select * from oldName where 1<>1;//让where条件不成立,只能拷贝结构,无法拷贝内容,且外键约束 .主键约束.唯一约束不会被复制.2.向已存在的表中复制数据: 如果两表结构一样: insert into newName select * from oldName; 如果两表结构不样: insert i

数据库备份脚本(表结构和数据)

完整备份一个数据库的表结构和数据: #!/bin/bash FILE=$(date "+%Y%m%d%H%M%S").sql GZFILE=$FILE.tar.gz cd sql_dump mysqldump -uUSER -hHOST -p DBNAME > $FILE tar -zcf $GZFILE $FILE du -h $GZFILE rm -f $FILE 原文地址:https://www.cnblogs.com/joeblackzqq/p/12122814.html

MySQL 复制表结构和复制表结构,数据

有时候有这样的需求,只需要复制表的结构,有时候复制表的数据和结构,那么怎么同时满足这样的要求呢,这样的代码怎么写呢? 使用 SHOW CREATE TABLE 命令获取创建数据表(CREATE TABLE) 语句,该语句包含了原数据表的结构,索引等.如果要加入内容,如果你想复制表的内容,你就可以使用 INSERT INTO ... SELECT 语句来实现. SHOW CREATE TABLE dc3688_tbl \G; 修改SQL语句的数据表名,并执行SQL语句 CREATE TABLE `

SqlServer 复制表结构及数据

SqlServer中: 目标表存在: INSERT INTO 目标表 SELECT * FROM 原表; 目标表不存在:SELECT * INTO 目标表 FROM 原表; Oracle中: 目标表存在:INSERT INTO 目标表 SELECT * FROM 原表; 目标表不存在:CREATE TABLE 目标表 AS SELECT * FROM 原表; 原文地址:https://www.cnblogs.com/chenyanbin/p/10503914.html

SQL复制表结构或表数据

需求: 软件开发过程中,一般会部署两个数据库:一个测试数据库提供给开发和测试过程使用:一个运维数据库提供上线使用.当需求变化需增加表时,会遇到数据库表结构或表数据同步的问题,这时就要复制表结构或表数据. 两种情形: 一.两个数据库部署在同一服务器上: 从数据库A复制到B: 复制表结构和数据:select * into  数据库B.dbo.Department from 数据库A.dbo.Department 只复制表结构:  select * into  数据库B.dbo.Department

复制表结构+数据(转)

1:复制表结构及数据到新表 select * into 目的数据库名.dbo.目的表名 from 原表名 select * into my0735home.dbo.infoMianTest from infoMian 2:备份表的一部分列(不写*而写出列的列表) select 列名1,列名2,列名3 into 目的数据库名.dbo.目的表名 from 原表名 select id,title,mtype,stype,author,tel,nr into infoMianTest2 from inf