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。
求好心人解答~~~~(>_<)~~~~
展开
 我来答
handangaoyang
2013-09-17 · TA获得超过2242个赞
知道大有可为答主
回答量:2633
采纳率:88%
帮助的人:902万
展开全部

把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


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

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式