求一存储过程,该如何处理
求一存储过程
创建一存储过程实现
create table a1(bh char(10),zl char(10))
insert into a1
select '1001','a' union all
select '1002','b' union all
select '1003','c' union all
select '1004','d'
create table b1(bm char(10),ziliao char(10))
insert into b1
select '1001@','a' union all
select '1002@','b' union all
select '1003','c'
select * from a1
select * from b1
bh zl
----------------------
1001 a
1002 b
1003 c
1004 d
bm ziliao
-------------------------
1001@ a
1002@ b
1003 c
判断a1表中的bh是否存在于(或等于)b1表中的bm,如果此bh存在(或等于)b1表中的bm,结束;
如果不存在,将a1表中此bh带上字符'@',再次判断是否存在b1表,如果存在,结束;如果不存在,
将a1表中此bh带上字符'@'作为b1表的bm插入到b1表中。举个例子:a1、b1表数据如下。
首先判断a1表中bh,1001 是否存在b1表中,因为不存在,所以带上@再次判断,1001@ 是否存在b1表中,因为存在,结束;
判断a1表中的bh,1002 是否存在b1表中,因为不存在,所以带上@再次判断,1002@ 是否存在b1表中,因为存在,结束;
判断a1表中的bh,1003 是否存在b1表中,因为存在,结束;
判断a1表中的bh,1004 是否存在b1表中,因为不存在,所以带上@再次判断,1004@ 是否存在b1表中,因为不存在,带上@将此数据值插入b1表,结束。
------解决思路----------------------
数据类型改为VARCHAR
创建一存储过程实现
create table a1(bh char(10),zl char(10))
insert into a1
select '1001','a' union all
select '1002','b' union all
select '1003','c' union all
select '1004','d'
create table b1(bm char(10),ziliao char(10))
insert into b1
select '1001@','a' union all
select '1002@','b' union all
select '1003','c'
select * from a1
select * from b1
bh zl
----------------------
1001 a
1002 b
1003 c
1004 d
bm ziliao
-------------------------
1001@ a
1002@ b
1003 c
判断a1表中的bh是否存在于(或等于)b1表中的bm,如果此bh存在(或等于)b1表中的bm,结束;
如果不存在,将a1表中此bh带上字符'@',再次判断是否存在b1表,如果存在,结束;如果不存在,
将a1表中此bh带上字符'@'作为b1表的bm插入到b1表中。举个例子:a1、b1表数据如下。
首先判断a1表中bh,1001 是否存在b1表中,因为不存在,所以带上@再次判断,1001@ 是否存在b1表中,因为存在,结束;
判断a1表中的bh,1002 是否存在b1表中,因为不存在,所以带上@再次判断,1002@ 是否存在b1表中,因为存在,结束;
判断a1表中的bh,1003 是否存在b1表中,因为存在,结束;
判断a1表中的bh,1004 是否存在b1表中,因为不存在,所以带上@再次判断,1004@ 是否存在b1表中,因为不存在,带上@将此数据值插入b1表,结束。
------解决思路----------------------
create table a1(bh varchar(10),zl varchar(10))
insert into a1
select '1001','a' union all
select '1002','b' union all
select '1003','c' union all
select '1004','d'
create table b1(bm varchar(10),ziliao varchar(10))
insert into b1
select '1001@','a' union all
select '1002@','b' union all
select '1003','c'
select * from a1
select * from b1
GO
CREATE PROCEDURE IsExists
as
DECLARE @bh VARCHAR(10)
DECLARE cur CURSOR SCROLL FOR
SELECT bh FROM dbo.a1
OPEN cur
FETCH NEXT FROM cur INTO @bh
WHILE @@FETCH_STATUS=0
BEGIN
IF NOT EXISTS (SELECT * FROM dbo.b1 WHERE bm=@bh)
BEGIN
IF NOT EXISTS (SELECT * FROM dbo.b1 WHERE bm=@bh+'@')
BEGIN
INSERT INTO dbo.b1( bm, ziliao )VALUES (@bh+'@', '')
END
END
FETCH NEXT FROM cur INTO @bh
END
CLOSE cur
DEALLOCATE cur
GO
EXEC IsExists
数据类型改为VARCHAR