武夷学院学习吧 关注:1贴子:30
  • 0回复贴,共1

动态SQL解决不同数据库直接的操作

只看楼主收藏回复

太久没有写后台数据库程序了,有点不生疏了。使用opendatasource(opendataset也可以)解决不同数据库操作时无法启动分布式事务协调的问题。
ALTER procedure dbo.up_moveDeviceForAssign
(
@returnMsg varchar(500) output,
@lab_Id int,
@deviceId varchar(50),
@constr varchar(200)-- 连接另一个数据库的连接字符串
)
as
declare @labName varchar(50),@deviceName varchar(50),@retV int,@sqlStr varchar(2000)
select @labName=labName,@deviceName=仪器名称 from labInf,s_zjAll
where labInf.labid=s_zjAll.lab_id and s_zjAll.仪器编号=@deviceid
set @retV=-1
if @labName is null
begin
set @sqlStr='insert into s_zjAll(领用单位号,仪器编号,仪器名称,型号,规格,单价,厂家,出厂号,出厂日期,购置日期,现状,存放地名称,经费科目,使用方向,设备来源,领用人,经手人,输入人,记帐人,财务凭单,输入日期,入库时间,变动日期,单据号,备注,设备号,科研号,折旧方式,字符字段1,字符字段2,字符字段3,字符字段4,字符字段5,数字字段1,数字字段2,数字字段3,数字字段4,资产类别,存放地编号,国标分类号,分类号,使用单位号,附件总价,附件数量,保修期限,国别,国别码,编号,数量,校区,图片文件,图文名称,图片文件1,图文名称1,图片文件2,图文名称2,图文名称3,图片文件3,审核,管理级别,清查方式,清查日期,清查异常,标志,财务审核,财审核日期,财务审核人,初审,初审人,初审日期,lab_id)';
set @sqlStr=@sqlstr+' select 领用单位号,仪器编号,仪器名称,型号,规格,单价,厂家,出厂号,出厂日期,购置日期,现状,存放地名称,经费科目,使用方向,设备来源,领用人,经手人,输入人,记帐人,财务凭单,输入日期,入库时间,变动日期,单据号,备注,设备号,科研号,折旧方式,字符字段1,字符字段2,字符字段3,字符字段4,字符字段5,数字字段1,数字字段2,数字字段3,数字字段4,资产类别,存放地编号,国标分类号,分类号,使用单位号,附件总价,附件数量,保修期限,国别,国别码,编号,数量,校区,图片文件,图文名称,图片文件1,图文名称1,图片文件2,图文名称2,图文名称3,图片文件3,审核,管理级别,清查方式,清查日期,清查异常,标志,财务审核,财审核日期,财务审核人,初审,初审人,初审日期,'+cast(@lab_id as varchar(20))+' from OPENDATASOURCE(''SQLOLEDB'','+''''+@constr+''''+').SbData.dbo.s_zjall where 仪器编号='''+@deviceid+''''
exec(@sqlStr)
set @retV=@@rowcount
end
else
begin
set @returnMsg='你选的设备:'''+rtrim(ltrim(@deviceName))+''',仪器编号:'''+@deviceId+'''已属于:'+@labName+',不能再添加到其他实验室。'
end
return @retV


IP属地:福建1楼2015-05-22 08:24回复