在一条SQL语句中同时对两个数据库中的不同表进行操作,有什么好的解决方法吗?

 我来答
shine戚七七
推荐于2017-09-08 · TA获得超过4.7万个赞
知道大有可为答主
回答量:2万
采纳率:75%
帮助的人:2617万
展开全部
解决办法:事务和存储过程。
具体操作:
create PROCEDURE [存储过程名]
(
@Title nvarchar(50),
@Content nvarchar(1000),
@Publisher nvarchar(200),
@UserID varchar(10)
)
AS
BEGIN
declare @posid int
SET NOCOUNT ON
begin transaction [事务名称]
insert into Bulletin(....) --向Bulletin表添加记录
if @@error $amp;<amp;$gt; 0="""" begin rollback transaction [事务名称]
select N '添加失败! ' as msg
return(0)
end
set @posid = @@identity --得到BulletinId的值
insert into ButtetinAuth(....) --向ButtetinAuth表添加记录
if @@error $amp;<amp;$gt; 0="""" begin rollback transaction [事务名称]
select N '添加失败! ' as msg
return(0)
end

commit transaction [事务名称]
select N '添加成功! ' as msg
END

"insert 表1;insert 表2 "这种方式是可以,但不能保证同步(如插入第一个表后就停电了,第二个表还没来得及插入,所以就不同步了),要数据同步就要用数据库事务。

private SqlConnection myConn = new SqlConnection(); //连接
private SqlTransaction Transaction = null; //事务
private SqlCommand Cmd = new SqlCommand();

假设myConn已经配置好

事务开始:
try
{
myConn.Open();
Transaction = myConn.BeginTransaction(); //事务开始
Cmd.Transaction = Transaction; //将Cmd指向Transaction事务

string strSQL= "insert 表1 ";
Cmd.CommandText = strSQL; //插入第一个表
Cmd.ExecuteNonQuery();

strSQL= "insert 表2 ";
Cmd.CommandText = strSQL; //插入第一个表
Cmd.ExecuteNonQuery();

Transaction.Commit(); //提交事务

}
catch (Exception e)
{
Transaction.Rollback(); //撇消事务
throw new Exception(e.Message);
dong_1984dd
2015-08-09 · TA获得超过1.1万个赞
知道小有建树答主
回答量:1070
采纳率:100%
帮助的人:224万
展开全部
  1. 二个数据库是在一台服务器上,还是两台服务器上。

  2. 如一台服务器上,这个就简单

  3. 直接更新就可以,如下SQL:

  4. update testset a=1

    update database.test1 set a=1

  5. 或插入操作,删除操作等

  6. 如果是两台服务器,那就需要设置服务器链接;

  7. SQL 如下:

  8. 服务器Ip+数据库+表,就可以实现操作。

  9. SQL 如下:192.168.1.100.databasename.dbo.table

     

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5183fa6
推荐于2017-10-02 · TA获得超过130个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:154万
展开全部
同一服务器?同一数据库系统?
假设 另一个数据库名为'数据库B',并且当然用户对两个数据库都有对应权限
select into [table] from [数据库B].[所有者].[表名]

如果不在同一服务器
select into [table] from opendatasource('sqloledb','data source=服务器名或IP;user id=登陆名;password=口令').数据库B.表名
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星口七雨兔0d
2010-12-24 · TA获得超过277个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:97万
展开全部
可以啊,在执行的时候,注意两个表的标示要写完整:数据库名.用户名.表名
例如:
insert into db1.yonghu1.bm
select * from db2.yonghu2.bm

db1和db2是数据库名,yonghu1和yonghu2是数据库的用户名,bm是表名。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式