22,210
社区成员
发帖
与我相关
我的任务
分享
drop procedure createTable;
go
create procedure createTable
(
@mainTB nvarchar(100),
@listTB nvarchar(100)
)
as
-- 建表
exec ('CREATE TABLE a') at zzx_link;
exec ('CREATE TABLE b') at zzx_link;
go
drop TRIGGER syncForUpdate;
go
CREATE TRIGGER syncForUpdate
on table
after update,insert
as
begin
declare @mainTableName nvarchar(100);
declare @listTableName nvarchar(100);
declare @mainTb nvarchar(100);
declare @listTb nvarchar(100);
declare @sql1 nvarchar(2550);
declare @sql2 nvarchar(2550);
declare @field0002 nvarchar(100);
declare @field0003 nvarchar(100);
set @mainTb = 'priceMainTable_a';
set @listTb = 'priceListTable_b';
set @mainTableName = 'zzx_link.database.dbo.'+'priceMainTable_a';
set @listTableName = 'zzx_link.database.dbo.'+'priceListTable_b';
-- 存在即更新,否则新增(表头+表体)
if EXISTS (SELECT 1)
select 2
-- ......
else
BEGIN
-- 建表,节点1
exec createTable @mainTB,@listTB;
-- 表头:新增,节点2
set @sql1 = N'insert into '+@mainTableName+' (id,field0001,field0002,field0003)
select isnull((SELECT MAX(ID)+1 FROM '+@listTableName+'),10000),20160125+@field0002,@field0002,@field0003
where not exists (select 1
from '+@mainTableName+');';
exec sp_executesql @sql1,
N'@field0002 nvarchar(100),@field0003 nvarchar(100)',
@field0002,@field0003;
-- 表体:新增,节点3
set @sql2 = N'insert into '+@listTableName+' (ID,field0009,field0004,field0005,field0006,field0007,field0008)
values (isnull((SELECT MAX(ID)+1 FROM '+@listTableName+'),10001),@field0009,@field0004,@field0005,@field0006,@field0007,@field0008);';
exec sp_executesql @sql2,
N'@field0009 nvarchar(100),@field0004 nvarchar(100),@field0005 nvarchar(100),@field0006 nvarchar(100),@field0007 nvarchar(100),@field0008 nvarchar(100)',
@field0009,@field0004,@field0005,@field0006,@field0007,@field0008;
END
end
drop procedure createPriceTable;
go
create procedure createPriceTable
(
@mainTB nvarchar(100),
@listTB nvarchar(100),
@sql1 nvarchar(500),
@sql2 nvarchar(500),
@mainTableName nvarchar(100),
@listTableName nvarchar(100)
)
as
BEGIN
begin
begin TRANSACTION
-- 建表
exec ('USE [OA]
CREATE TABLE '+@mainTB+'(
ID numeric(19, 0) NOT NULL,
state int NULL,
start_member_id varchar(25) NULL,
start_date datetime NULL,
approve_member_id varchar(25) NULL,
approve_date datetime NULL,
finishedflag int NULL,
ratifyflag int NULL,
ratify_member_id varchar(25) NULL,
ratify_date datetime NULL,
sort int NULL,
modify_member_id varchar(25) NULL,
modify_date datetime NULL,
field0001 nvarchar(255) NULL,
field0002 nvarchar(255) NULL,
field0003 nvarchar(255) NULL,
PRIMARY KEY CLUSTERED
(
ID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY];') at zzx_link;
exec ('USE [OA]
CREATE TABLE '+@listTB+'(
ID numeric(19, 0) NOT NULL,
formmain_id numeric(19, 0) NULL,
sort int NULL,
field0004 nvarchar(255) NULL,
field0005 nvarchar(255) NULL,
field0006 nvarchar(255) NULL,
field0007 nvarchar(255) NULL,
field0008 nvarchar(255) NULL,
field0009 nvarchar(255) NULL,
PRIMARY KEY CLUSTERED
(
ID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY];') at zzx_link;
begin
commit TRANSACTION;
end
end
begin
RAISERROR ('操作1!' , 16, 1) WITH NOWAIT
set @sql1 = N'insert into '+@mainTableName+' (id,field0001,field0002,field0003)
select isnull((SELECT MAX(ID)+1 FROM '+@listTableName+'),10000),20160125,@cCusCode,@cCusName
where not exists (select 1
from '+@mainTableName+');';
exec sp_executesql @sql1,
N'@cCusCode nvarchar(100),@cCusName nvarchar(100)',
'1','2';
RAISERROR ('操作2!' , 16, 1) WITH NOWAIT
-- 表体:新增
set @sql2 = N'insert into '+@listTableName+' (ID,field0009,field0004,field0005,field0006,field0007,field0008,formmain_id)
values (isnull((SELECT MAX(ID)+1 FROM '+@listTableName+'),10001),@AutoID,@cInvCode,@cInvName,@cInvStd,@cComUnitCode,@iInvSaleCost,11);';
exec sp_executesql @sql2,
N'@AutoID nvarchar(100),@cInvCode nvarchar(100),@cInvName nvarchar(100),@cInvStd nvarchar(100),@cComUnitCode nvarchar(100),@iInvSaleCost nvarchar(100)',
'1','2','3','4','5','6';
end
end
go
drop TRIGGER JY_syncSA_CusUPrice_For_Update;
go
--价格表:
--1.手动修改OA表的排序规则Chinese_PRC_90为Chinese_PRC
--2.替换OA-U8的链接数据库
-- 问题1.无法判断表是否存在;2.exec sp_executesql同时执行报错。
CREATE TRIGGER JY_syncSA_CusUPrice_For_Update
on SA_CusUPrice
after update,insert
as
begin
declare @mainTableName nvarchar(100);
declare @listTableName nvarchar(100);
declare @mainTb nvarchar(100);
declare @listTb nvarchar(100);
set @mainTb = 'priceMainTable_'+@cCusCode;
set @listTb = 'priceListTable_'+@cCusCode;
set @mainTableName = 'zzx_link.OA.dbo.'+'priceMainTable_'+@cCusCode;
set @listTableName = 'zzx_link.OA.dbo.'+'priceListTable_'+@cCusCode;
BEGIN
-- 建表,跨服务器问题
exec createPriceTable @mainTB,@listTB,'','',@mainTableName,@listTableName;
END
end
-- 建表
exec ('CREATE TABLE a') at zzx_link;
exec ('CREATE TABLE b') at zzx_link;
-- 存在即更新,否则新增(表头+表体)
if EXISTS (SELECT *
FROM dbo.SysObjects
WHERE name = @mainTb
AND OBJECTPROPERTY(ID, 'IsTable') = 1)
在createPriceTable里判断表存在时不创建 用AT 方法output实现
按以上把语句改正确再调试---- 启用RPC
--exec sp_serveroption @server='zzx_link' , @optname= 'rpc', @optvalue ='TRUE'
--exec sp_serveroption @server='zzx_link' , @optname= 'rpc out', @optvalue='TRUE'
drop procedure createPriceTable;
go
-- 创建价格表:priceTable_01001(经销商编码)
create procedure createPriceTable
(
@mainTB nvarchar(100),
@listTB nvarchar(100)
)
as
SET NOCOUNT ON
BEGIN
begin transaction
-- 建表
exec ('USE [OA]
CREATE TABLE '+@mainTB+'(
ID numeric(19, 0) NOT NULL,
state int NULL,
start_member_id varchar(25) NULL,
start_date datetime NULL,
approve_member_id varchar(25) NULL,
approve_date datetime NULL,
finishedflag int NULL,
ratifyflag int NULL,
ratify_member_id varchar(25) NULL,
ratify_date datetime NULL,
sort int NULL,
modify_member_id varchar(25) NULL,
modify_date datetime NULL,
field0001 nvarchar(255) NULL,
field0002 nvarchar(255) NULL,
field0003 nvarchar(255) NULL,
PRIMARY KEY CLUSTERED
(
ID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY];') at zzx_link;
exec ('USE [OA]
CREATE TABLE '+@listTB+'(
ID numeric(19, 0) NOT NULL,
formmain_id numeric(19, 0) NULL,
sort int NULL,
field0004 nvarchar(255) NULL,
field0005 nvarchar(255) NULL,
field0006 nvarchar(255) NULL,
field0007 nvarchar(255) NULL,
field0008 nvarchar(255) NULL,
field0009 nvarchar(255) NULL,
PRIMARY KEY CLUSTERED
(
ID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY];') at zzx_link;
IF @@TRANCOUNT>0
COMMIT TRAN
end
SET NOCOUNT OFF
go
drop TRIGGER JY_syncSA_CusUPrice_For_Update;
go
CREATE TRIGGER JY_syncSA_CusUPrice_For_Update
on SA_CusUPrice
after update,insert
as
begin
declare @mainTableName nvarchar(100);
declare @listTableName nvarchar(100);
declare @mainTb nvarchar(100);
declare @listTb nvarchar(100);
declare @rowsCount nvarchar(100);
declare @sql nvarchar(2550);
declare @sqls nvarchar(1000);
declare @sql1 nvarchar(2550);
declare @sql2 nvarchar(2550);
declare @AutoID nvarchar(100);
declare @cCusCode nvarchar(100);
declare @cCusName nvarchar(100);
declare @cInvCode nvarchar(100);
declare @cInvName nvarchar(100);
declare @cInvStd nvarchar(100);
declare @cComUnitCode nvarchar(100);
declare @iInvSaleCost nvarchar(100);
set @cCusCode = (select cCusCode from inserted ins);
set @cCusName = (select cus.cCusName from inserted ins,Customer cus where ins.cCusCCode = cus.cCusCode);
set @AutoID = (select ins.AutoID from inserted ins);
set @cInvCode = (select ins.cInvCode from inserted ins);
set @cInvName = (select inv.cInvName from inserted ins,inventory inv where ins.cInvCode = inv.cInvCode);
set @cInvStd = (select inv.cInvStd from inserted ins,inventory inv where ins.cInvCode = inv.cInvCode);
set @cComUnitCode = (select inv.cComUnitCode from inserted ins,inventory inv where ins.cInvCode = inv.cInvCode);
set @iInvSaleCost = (select ins.iInvSaleCost from inserted ins,inventory inv where ins.cInvCode = inv.cInvCode);
set @mainTb = 'priceMainTable_'+@cCusCode;
set @listTb = 'priceListTable_'+@cCusCode;
set @mainTableName = 'zzx_link.OA.dbo.'+'priceMainTable_'+@cCusCode;
set @listTableName = 'zzx_link.OA.dbo.'+'priceListTable_'+@cCusCode;
set @rowsCount = '-1';
-- 存在即更新,否则新增(表头+表体)
if EXISTS (SELECT *
FROM dbo.SysObjects
WHERE ID = object_id(N''''+@mainTb+'''')
AND OBJECTPROPERTY(ID, 'IsTable') = 1)
begin
set @sqls='select @rowsCount = count(1) from '+@listTableName+' where field0004 = @cInvCode;'
exec sp_executesql @sqls,N'@rowsCount int out,@cInvCode nvarchar(100)',@rowsCount out,@cInvCode;
select @rowsCount;
if @rowsCount != 0
begin
-- 表体:更新
set @sql = N'update '+@listTableName+' set field0008 = @iInvSaleCost where field0004 = @cInvCode;'
exec sp_executesql @sql,
N'@iInvSaleCost nvarchar(100),@cInvCode nvarchar(100)',
@iInvSaleCost,@cInvCode;
end
else
begin
-- 表体:新增
set @sql = N'insert into '+@listTableName+' (ID,field0009,field0004,field0005,field0006,field0007,field0008,formmain_id)
values (isnull((SELECT MAX(ID)+1 FROM '+@listTableName+'),10001),@AutoID,@cInvCode,@cInvName,@cInvStd,@cComUnitCode,@iInvSaleCost,11);';
exec sp_executesql @sql,
N'@AutoID nvarchar(100),@cInvCode nvarchar(100),@cInvName nvarchar(100),@cInvStd nvarchar(100),@cComUnitCode nvarchar(100),@iInvSaleCost nvarchar(100)',
@AutoID,@cInvCode,@cInvName,@cInvStd,@cComUnitCode,@iInvSaleCost;
end
end
else
BEGIN
-- 建表,跨服务器问题
--exec createPriceTable @mainTB,@listTB;
-- 建表
exec ('USE [OA]
CREATE TABLE '+@mainTB+'(
ID numeric(19, 0) NOT NULL,
state int NULL,
start_member_id varchar(25) NULL,
start_date datetime NULL,
approve_member_id varchar(25) NULL,
approve_date datetime NULL,
finishedflag int NULL,
ratifyflag int NULL,
ratify_member_id varchar(25) NULL,
ratify_date datetime NULL,
sort int NULL,
modify_member_id varchar(25) NULL,
modify_date datetime NULL,
field0001 nvarchar(255) NULL,
field0002 nvarchar(255) NULL,
field0003 nvarchar(255) NULL,
PRIMARY KEY CLUSTERED
(
ID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY];') at zzx_link;
exec ('USE [OA]
CREATE TABLE '+@listTB+'(
ID numeric(19, 0) NOT NULL,
formmain_id numeric(19, 0) NULL,
sort int NULL,
field0004 nvarchar(255) NULL,
field0005 nvarchar(255) NULL,
field0006 nvarchar(255) NULL,
field0007 nvarchar(255) NULL,
field0008 nvarchar(255) NULL,
field0009 nvarchar(255) NULL,
PRIMARY KEY CLUSTERED
(
ID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY];') at zzx_link;
-- 表头:新增
set @sql1 = N'insert into '+@mainTableName+' (id,field0001,field0002,field0003)
select isnull((SELECT MAX(ID)+1 FROM '+@listTableName+'),10000),20160125,@cCusCode,@cCusName
where not exists (select 1
from '+@mainTableName+');';
exec sp_executesql @sql1,
N'@cCusCode nvarchar(100),@cCusName nvarchar(100)',
@cCusCode,@cCusName;
---- 表体:新增
--set @sql2 = N'insert into '+@listTableName+' (ID,field0009,field0004,field0005,field0006,field0007,field0008,formmain_id)
-- values (isnull((SELECT MAX(ID)+1 FROM '+@listTableName+'),10001),@AutoID,@cInvCode,@cInvName,@cInvStd,@cComUnitCode,@iInvSaleCost,11);';
--exec sp_executesql @sql2,
-- N'@AutoID nvarchar(100),@cInvCode nvarchar(100),@cInvName nvarchar(100),@cInvStd nvarchar(100),@cComUnitCode nvarchar(100),@iInvSaleCost nvarchar(100)',
-- @AutoID,@cInvCode,@cInvName,@cInvStd,@cComUnitCode,@iInvSaleCost;
END
end