求帮忙看下 小弟我的这个匹配查询存储过程的语句该如何写
求帮忙看下 我的这个匹配查询存储过程的语句该怎么写
有JA,YI,BI,DI与MMDATA表逐个匹配,(如果有相同的字段插入YDATA表,如果YDATA表中已经有此字段,则不插入YDATA表),MDATA表可能包含JA,YI,BI,DI四张表的全部数据,求帮忙看下:
JA,YI,BI,DI,MMDATA,YDATA共有字段JNAME ,如果JA和YI中都有值AA,那JA 匹配后AA 插入YDATA,YI匹配的时候AA 就不用再插入,本人新手,代码乱请见谅,我是用的游标逐个匹配
发现问题出到 else后面的语句 后面的while感觉没循环,求精通的朋友指点下
------解决思路----------------------
用这个试试,不需要循环的哇
------解决思路----------------------
有JA,YI,BI,DI与MMDATA表逐个匹配,(如果有相同的字段插入YDATA表,如果YDATA表中已经有此字段,则不插入YDATA表),MDATA表可能包含JA,YI,BI,DI四张表的全部数据,求帮忙看下:
JA,YI,BI,DI,MMDATA,YDATA共有字段JNAME ,如果JA和YI中都有值AA,那JA 匹配后AA 插入YDATA,YI匹配的时候AA 就不用再插入,本人新手,代码乱请见谅,我是用的游标逐个匹配
create proc proo
@ss varchar(255)
as
declare @i int,@j int,@ch varchar(255),@sql nvarchar(1000),@m int ,@n int,@ar varchar(255)
set @i =1
set @m =1
-------------------匹配后的行数
set @sql = 'select @a=count(b.jname) from '+ @ss + ' as a inner join mmdata as b on a.jname=b.jname'
exec sp_executesql @sql,N'@a int output',@j output
declare cu SCROLL cursor
for
select b.jname from ja as a inner join mmdata as b on a.jname=b.jname
open cu
while @i<=@j
begin
fetch absolute @i from cu into @ch
--------------------如果YDATA 没有数据,则吧匹配的插入此表
if not exists (select * from ydata)
begin
insert into ydata(jname) values (@ch)
end
else
begin
set @n=(select count(d.jname) from ydata as d)
declare cur SCROLL cursor
for
select d.jname from ydata as d
open cur
---------------------如果YDATA存在数据,并且输出的数据和前面匹配的数据不相等,则插入匹配数值到YDATA
while @m<=@n
begin
fetch absolute @m from cur into @ar
if @ch!=@ar
insert into ydata(jname) values (@ch)
end
set @m=@m+1
end
close cur
deallocate cur
set @i=@i+1
end
close cu
deallocate cu
发现问题出到 else后面的语句 后面的while感觉没循环,求精通的朋友指点下
------解决思路----------------------
Insert Into YDATA(JName)
Select JName From (
Select JName From JA
Union
Select JName From YI
Union
Select JName From BI
Union
Select JName From DI
Union
Select JName From MMDATA) A
Left Join YData B On B.JName = A.JName
Where IsNull(B.JName,N'') = N''
用这个试试,不需要循环的哇
------解决思路----------------------
INSERT INTO YDATA(JName)
SELECT A.JName
FROM(
SELECT JName From JA
UNION
SELECT JName From YI
UNION
SELECT JName From BI
UNION
SELECT JName From DI
)A
JOIN MMDATA B ON A.JName=B.JName
LEFT JOIN YData C On A.JName=C.JName
WHERE C.JName IS NULL