sql server中,从表1中选出一字段在表2也有的数据的存储过程

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。
求好心人解答~~~~(>_<)~~~~

把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


存储过程,这样就可以了。你是不是想用游标实现?

温馨提示:答案为网友推荐,仅供参考