非常奇怪的一个问题。请大家帮忙看看。
第一步:创建测试表
CREATE TABLE aaaaa
(
a varchar (18) COLLATE Chinese_PRC_CS_AS_WS NULL ,
b varchar (18) COLLATE Chinese_PRC_CS_AS_WS NOT NULL ,
c decimal (18, 0) NOT NULL ,
d varchar (10) COLLATE Chinese_PRC_CS_AS_WS NULL
);ALTER TABLE aaaaa ADD CONSTRAINT [PK_aaaaa ] PRIMARY KEY CLUSTERED (c,b);CREATE TABLE bbbb
(
a varchar (18) COLLATE Chinese_PRC_CI_AS NULL ,
b varchar (18) COLLATE Chinese_PRC_CI_AS NOT NULL ,
c decimal (18, 0) NOT NULL ,
d varchar (10) COLLATE Chinese_PRC_CI_AS NULL
);CREATE TABLE ccccc
(
a varchar (18) COLLATE Chinese_PRC_CI_AS NULL ,
b varchar (18) COLLATE Chinese_PRC_CI_AS NOT NULL ,
c decimal (18, 0) NOT NULL ,
d varchar (10) COLLATE Chinese_PRC_CI_AS NULL
);
ALTER TABLE bbbbADD CONSTRAINT [PK_bbbb ] PRIMARY KEY CLUSTERED (c,b);我要实现的功能是:当在aaaaa表内插入一条数据时,首先判断bbbb是否有这条数据的存在,如果存在就不触发,如果不存在就触发。
下面是我写的一个触发器:但是报:无法解决 equal to 操作的排序规则冲突。请大家给点意见创建触发器
create TRIGGER aaaaa_CBD_INSERTING ON aaaaa FOR insert AS BEGIN declare @v_rowcount int
select @v_rowcount=count(*) from bbbb G,inserted I where G.a='aaaaa' and G.c=I.c or G.b=I.b
if (@v_rowcount = 0)
begin
insert into ccccc values('1','1','1','1')
end
end
第一步:创建测试表
CREATE TABLE aaaaa
(
a varchar (18) COLLATE Chinese_PRC_CS_AS_WS NULL ,
b varchar (18) COLLATE Chinese_PRC_CS_AS_WS NOT NULL ,
c decimal (18, 0) NOT NULL ,
d varchar (10) COLLATE Chinese_PRC_CS_AS_WS NULL
);ALTER TABLE aaaaa ADD CONSTRAINT [PK_aaaaa ] PRIMARY KEY CLUSTERED (c,b);CREATE TABLE bbbb
(
a varchar (18) COLLATE Chinese_PRC_CI_AS NULL ,
b varchar (18) COLLATE Chinese_PRC_CI_AS NOT NULL ,
c decimal (18, 0) NOT NULL ,
d varchar (10) COLLATE Chinese_PRC_CI_AS NULL
);CREATE TABLE ccccc
(
a varchar (18) COLLATE Chinese_PRC_CI_AS NULL ,
b varchar (18) COLLATE Chinese_PRC_CI_AS NOT NULL ,
c decimal (18, 0) NOT NULL ,
d varchar (10) COLLATE Chinese_PRC_CI_AS NULL
);
ALTER TABLE bbbbADD CONSTRAINT [PK_bbbb ] PRIMARY KEY CLUSTERED (c,b);我要实现的功能是:当在aaaaa表内插入一条数据时,首先判断bbbb是否有这条数据的存在,如果存在就不触发,如果不存在就触发。
下面是我写的一个触发器:但是报:无法解决 equal to 操作的排序规则冲突。请大家给点意见创建触发器
create TRIGGER aaaaa_CBD_INSERTING ON aaaaa FOR insert AS BEGIN declare @v_rowcount int
select @v_rowcount=count(*) from bbbb G,inserted I where G.a='aaaaa' and G.c=I.c or G.b=I.b
if (@v_rowcount = 0)
begin
insert into ccccc values('1','1','1','1')
end
end
select @v_rowcount=count(*) from bbbb G,inserted I where G.a='aaaaa' and G.c=I.c or G.b=I.b
COLLATE Chinese_PRC_CS_AS_WS NULL
排序规则不同,加上上面这句就可以了
where G.a='aaaaa' and (G.c collate Chinese_PRC_CI_AS =I.c collate Chinese_PRC_CI_AS or G.b collate Chinese_PRC_CI_AS =I.b collate Chinese_PRC_CI_AS)
强硬的方法是把表的collation彻底改过来。