我要实现 在 数据库a 的test表中新增一条数据,新增之后同时给数据库b的test表也添加一条同的数据(根据一个字段检测数据重复则不添加)两个数据库不一定在一个设备上。数据库新手,最好能给出解决方法。
7 个解决方案
#1
最好是用程序做成服务分别新增两个环境DB
数据库只能用连接服务器+触发器去做,必须要配置好MSDTC
数据库只能用连接服务器+触发器去做,必须要配置好MSDTC
#2
我已经用定时器实现了这个功能,但是我怕有些数据会漏写,而且也有效率问题(我是用xml中转数据),用触发器能做到实时更新而且不会漏写数据。
#4
定时器是个不错的选择,你这个情况,不建议使用 TRI ,万一哪一天你的网断了,你的生产库 insert 会失败的。
#5
USE [tosoft]
GO
/****** Object: StoredProcedure [dbo].[sendInfoToRemoteDb] Script Date: 12/23/2015 17:28:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sendInfoToRemoteDb]
@userId int,
@userName varchar(50),
@roleName varchar(50),
@deptName varchar(50),
@state int
AS
BEGIN
--exec sp_addlinkedserver
--@server='xxx',
--@srvproduct='',
--@provider='SQLOLEDB',
--@provstr='Driver={SQL SERVER};SERVER=IP;UID=xx;PWD=xx;Database=test'
{ if not exists
(select userId from xxx.test.dbo.test_dataChange where not userId=@userId)
begin
insert into xxx.test.dbo.test_dataChange(userId,userName,roleName,deptName,state)
values(@userId,@userName,@roleName,@deptName,@state)
end } ---》这段代码我是想在插入数据前验证这条数据是否重复,如果重复则不添加,但是这么写这条存储过程不起作用
[color=#00FFFF]{ insert into xxx.test.dbo.test_dataChange(userId,userName,roleName,deptName,state)
values(@userId,@userName,@roleName,@deptName,@state) }--这段代码是我实际使用的,可行[/color]
END
sql语句橙色部分是能实现的。谁帮我看看橙色部分代码为什么出错,如果要实现我想要的功能要怎么写。
#6
USE [tosoft]
GO
/****** Object: StoredProcedure [dbo].[sendInfoToRemoteDb] Script Date: 12/23/2015 17:28:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sendInfoToRemoteDb]
@userId int,
@userName varchar(50),
@roleName varchar(50),
@deptName varchar(50),
@state int
AS
BEGIN
--exec sp_addlinkedserver
--@server='xxx',
--@srvproduct='',
--@provider='SQLOLEDB',
--@provstr='Driver={SQL SERVER};SERVER=IP;UID=xx;PWD=xx;Database=test'
{ if not exists
(select userId from xxx.test.dbo.test_dataChange where not userId=@userId)
begin
insert into xxx.test.dbo.test_dataChange(userId,userName,roleName,deptName,state)
values(@userId,@userName,@roleName,@deptName,@state)
end } ---》这段代码我是想在插入数据前验证这条数据是否重复,如果重复则不添加,但是这么写这条存储过程不起作用
[color=#00FFFF]{ insert into xxx.test.dbo.test_dataChange(userId,userName,roleName,deptName,state)
values(@userId,@userName,@roleName,@deptName,@state) }--这段代码是我实际使用的,可行[/color]
END
sql语句橙色部分是能实现的。谁帮我看看橙色部分代码为什么出错,如果要实现我想要的功能要怎么写。
#7
-- 橙色部分,换成这一句话就可以了
insert into xxx.test.dbo.test_dataChange(userId,userName,roleName,deptName,state)
select @userId,@userName,@roleName,@deptName,@state
where not exists(select userId from xxx.test.dbo.test_dataChange where not userId=@userId)
#1
最好是用程序做成服务分别新增两个环境DB
数据库只能用连接服务器+触发器去做,必须要配置好MSDTC
数据库只能用连接服务器+触发器去做,必须要配置好MSDTC
#2
我已经用定时器实现了这个功能,但是我怕有些数据会漏写,而且也有效率问题(我是用xml中转数据),用触发器能做到实时更新而且不会漏写数据。
#3
#4
定时器是个不错的选择,你这个情况,不建议使用 TRI ,万一哪一天你的网断了,你的生产库 insert 会失败的。
#5
USE [tosoft]
GO
/****** Object: StoredProcedure [dbo].[sendInfoToRemoteDb] Script Date: 12/23/2015 17:28:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sendInfoToRemoteDb]
@userId int,
@userName varchar(50),
@roleName varchar(50),
@deptName varchar(50),
@state int
AS
BEGIN
--exec sp_addlinkedserver
--@server='xxx',
--@srvproduct='',
--@provider='SQLOLEDB',
--@provstr='Driver={SQL SERVER};SERVER=IP;UID=xx;PWD=xx;Database=test'
{ if not exists
(select userId from xxx.test.dbo.test_dataChange where not userId=@userId)
begin
insert into xxx.test.dbo.test_dataChange(userId,userName,roleName,deptName,state)
values(@userId,@userName,@roleName,@deptName,@state)
end } ---》这段代码我是想在插入数据前验证这条数据是否重复,如果重复则不添加,但是这么写这条存储过程不起作用
[color=#00FFFF]{ insert into xxx.test.dbo.test_dataChange(userId,userName,roleName,deptName,state)
values(@userId,@userName,@roleName,@deptName,@state) }--这段代码是我实际使用的,可行[/color]
END
sql语句橙色部分是能实现的。谁帮我看看橙色部分代码为什么出错,如果要实现我想要的功能要怎么写。
#6
USE [tosoft]
GO
/****** Object: StoredProcedure [dbo].[sendInfoToRemoteDb] Script Date: 12/23/2015 17:28:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sendInfoToRemoteDb]
@userId int,
@userName varchar(50),
@roleName varchar(50),
@deptName varchar(50),
@state int
AS
BEGIN
--exec sp_addlinkedserver
--@server='xxx',
--@srvproduct='',
--@provider='SQLOLEDB',
--@provstr='Driver={SQL SERVER};SERVER=IP;UID=xx;PWD=xx;Database=test'
{ if not exists
(select userId from xxx.test.dbo.test_dataChange where not userId=@userId)
begin
insert into xxx.test.dbo.test_dataChange(userId,userName,roleName,deptName,state)
values(@userId,@userName,@roleName,@deptName,@state)
end } ---》这段代码我是想在插入数据前验证这条数据是否重复,如果重复则不添加,但是这么写这条存储过程不起作用
[color=#00FFFF]{ insert into xxx.test.dbo.test_dataChange(userId,userName,roleName,deptName,state)
values(@userId,@userName,@roleName,@deptName,@state) }--这段代码是我实际使用的,可行[/color]
END
sql语句橙色部分是能实现的。谁帮我看看橙色部分代码为什么出错,如果要实现我想要的功能要怎么写。
#7
-- 橙色部分,换成这一句话就可以了
insert into xxx.test.dbo.test_dataChange(userId,userName,roleName,deptName,state)
select @userId,@userName,@roleName,@deptName,@state
where not exists(select userId from xxx.test.dbo.test_dataChange where not userId=@userId)