sql server 數據庫使用存儲過程進行數據抽取

設計需求:本地庫抽取遠程庫數據數據進行數據同步 ,只適用於sql server數據庫

CREATE PROC [dbo].[DATA_RSYNC] AS
declare @id INT ;--某個表中最大ID(本地表)
declare @id2 int; --某個表中最大ID遠程表)
DECLARE @id4 INT;--COUNT_TABLES表中最大值
DECLARE @id5 INT;-- ID佔位
DECLARE @t_name VARCHAR(8000)
--獲取count_table 總表名
SELECT @id4=MAX(ID) FROM COUNT_TABLES;
SET @id5=1
WHILE (@id5<(@id4+1))
BEGIN
--某個表中最大ID(遠程表)@id2----------------------------
DECLARE @t_name2 VARCHAR(100)
DECLARE @sql_1 nvarchar(4000)
SELECT @t_name2=name FROM COUNT_TABLES WHERE id=@id5
PRINT @t_name2
DECLARE @id2_1 nvarchar(100)
set @sql_1 = N'SELECT @id2_1= MAX(ID) FROM OTW_BACK.smuat.dbo.'+@t_name2
exec sp_executesql @sql_1,N'@id2_1 nvarchar(100) output',@id2_1 output
SET @id2=@id2_1
PRINT '@id2_1===='
PRINT @id2_1
--某個表中最大ID(本地表) @id----------------------------
DECLARE @t_name1 VARCHAR(100)
DECLARE @sql_2 nvarchar(4000)
DECLARE @id_1 nvarchar(100)
PRINT '@id5='
PRINT @id5
SELECT @t_name1=name FROM COUNT_TABLES WHERE id=@id5
PRINT @t_name1
set @sql_2 = N' select  @id_1 = MAX(ID) FROM '+ @t_name1
exec sp_executesql @sql_2,N'@id_1 nvarchar(100) output',@id_1 output
SET @id=@id_1
PRINT '本地表最大ID@id_1='
PRINT @id_1
---------------------------------------------------------
--獲取count_table 總表名
DECLARE @id3 INT; --表名object_id
SELECT @id3=object_id,@t_name=name FROM COUNT_TABLES WHERE id=@id5;
PRINT @id3 
PRINT '表名'
PRINT @t_name
declare @s varchar(8000) 
SET @s=''
select @s = isnull(@s+',', '') + [name] from syscolumns where id=@id3;
declare @subString VARCHAR(8000)
select @subString = substring(@s,2,8000);
SET @s=@subString
PRINT '表對應的字段名@s====' PRINT @s PRINT @id3
PRINT '字段名取值結束'
----------------------------------------------------
PRINT '@id????' PRINT @id PRINT '@id2????' PRINT @id2
				WHILE (@id<(@id2+1))
				BEGIN
						DECLARE @sql_3 VARCHAR(8000);
						SET @sql_3 = 'alter table ' +@t_name+ ' NOCHECK constraint all'--關閉所有約束
						EXEC (@sql_3)
						PRINT '已經關閉所有約束'
PRINT ' IDENTITY_INSERT 設置爲ON'
						declare @s1 varchar(1000) 
						declare @sql varchar(8000)
						declare @id1 varchar(20)
						SELECT  @id1=@id+1
						SELECT @s1=name FROM COUNT_TABLES WHERE object_id=@id3
DECLARE @sql_4 VARCHAR(8000);
SET @sql_4 = 'SET IDENTITY_INSERT ' +@t_name+ ' ON'
						SET @sql= 'SET IDENTITY_INSERT ' +@t_name+ ' ON;'+'insert into '+@s1+'('+@s+') SELECT * from OTW_BACK.smuat.dbo.'+@t_name+ ' a WHERE a.ID='+@id1+';'+
											'SET IDENTITY_INSERT ' +@t_name+ ' OFF';
PRINT '=========='
						EXEC (@sql_4)
PRINT @sql_4
						EXEC (@sql)
PRINT @sql
						PRINT @sql
						SET @id=@id+1
DECLARE @sql_5 VARCHAR(8000)
SET @sql_5 = 'alter table ' +@t_name+ ' CHECK constraint all' --打開所有約束
PRINT '打開所有約束'
EXEC (@sql_5)
				END
---------------------------------------------------------
SET @id5=@id5+1
END

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章