sql server中,从表1中选出一字段在表2也有的数据的存储过程
setANSI_NULLSONsetQUOTED_IDENTIFIERONgoALTERproc[dbo].[checkcorrect](@tabsysname)asde...
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER proc [dbo].[checkcorrect] (@tab sysname)
as
declare @sql varchar(4000)
declare @where varchar(2000)
declare @CharTo varchar(4000)
declare tb cursor local
for select ltrim(rtrim(CharTo)) as CharTo from [book]
open tb
set @tab='tudou'
fetch next from tb into @CharTo
while @@fetch_status=0
begin
set @tab='tudou'
set @where=' where 标题 like ''%'+@CharTo+'%'''
set @sql= 'insert into Table select * from '+@tab+@where
--print(@charto)
print(@sql)
exec(@sql)
fetch tb into @CharTo
end
close tb
deallocate tb
上面的语句是逐条读取book的数据,然后扫一遍tudou表,把tudou表中含有book字段的选出来查到Table表里。但是tudou表的数据量远远大于book表的数据量,所以想先逐条读取tudou表的数据,然后扫一遍book表,如果在book有的话,就把该条数据插入到Table表中。
对了,book表的CharTo列 对应 tudou表的标题列,执行语句是exec checkcorrect tudou。
求好心人解答~~~~(>_<)~~~~ 展开
set QUOTED_IDENTIFIER ON
go
ALTER proc [dbo].[checkcorrect] (@tab sysname)
as
declare @sql varchar(4000)
declare @where varchar(2000)
declare @CharTo varchar(4000)
declare tb cursor local
for select ltrim(rtrim(CharTo)) as CharTo from [book]
open tb
set @tab='tudou'
fetch next from tb into @CharTo
while @@fetch_status=0
begin
set @tab='tudou'
set @where=' where 标题 like ''%'+@CharTo+'%'''
set @sql= 'insert into Table select * from '+@tab+@where
--print(@charto)
print(@sql)
exec(@sql)
fetch tb into @CharTo
end
close tb
deallocate tb
上面的语句是逐条读取book的数据,然后扫一遍tudou表,把tudou表中含有book字段的选出来查到Table表里。但是tudou表的数据量远远大于book表的数据量,所以想先逐条读取tudou表的数据,然后扫一遍book表,如果在book有的话,就把该条数据插入到Table表中。
对了,book表的CharTo列 对应 tudou表的标题列,执行语句是exec checkcorrect tudou。
求好心人解答~~~~(>_<)~~~~ 展开
展开全部
把tudou表中,通过“标题列”与book表中CharTo列,能够对应上的数据,插入到Table表中。
如果我的理解是对的。sql语句如下:
INSERT INTO Table
SELECT * FROM tudou AS a
INNER JOIN [Book] AS b ON a.标题=b.CharTo
追问
嗯嗯,就是这个意思。请问用存储过程该怎么实现。虽然知道存储过程执行很慢,但想了解一下具体步骤,真心谢谢了。
追答
存储过程很快啊。
存储过程,就是把本来需要多次与数据库建立连接,合并在一起,只要与数据库建立一次连接,就可以搞定,所以很快。
你用了游标,所以会慢,而且还会出现一个问题,就是数据可能会出错,因为你是手动比对,而不是用的连接比对。
好了,扯淡,到此为止,存储过程,也是一句话。你的意思是不是要用游标?
CREATE PROCEDURE proc_Update
AS
BEGIN
INSERT INTO Table
SELECT * FROM tudou AS a
INNER JOIN [Book] AS b ON a.标题=b.CharTo
END
GO
EXEC proc_Update
存储过程,这样就可以了。你是不是想用游标实现?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询