也可以用游标:create proc a @1 cursor varying out, @2 cursor varying out as declare b cursor local for select * from table1 declare c cursor local for select * from table1 open b open c set @1=b set @2=c godeclare @a cursor,@b cursorexec a @a out,@b out fetch @a fetch @b fetch @b fetch @b fetch @aclose @a close @bdeallocate @a deallocate @bdrop proc a
@a text
as
exec(@a)
go
--调用:
exec xx 'select * from ... update ... insert...'
<?xml version="1.0" encoding="GB2312"?>
<电子病历>
<病案 num="1">
<姓名>梁景</姓名>
<性别>女</性别>
<出生日期>1985-7-12</出生日期>
<婚姻>已婚</婚姻>
<职业>工人</职业>
</病案>
<病案 num="2">
<姓名>张路</姓名>
<性别>女</性别>
<出生日期>1985-7-12</出生日期>
<婚姻>已婚</婚姻>
<职业>工人</职业>
</病案>
<病案 num="3">
<姓名>何江</姓名>
<性别>男</性别>
<出生日期>1985-7-12</出生日期>
<婚姻>已婚</婚姻>
<职业>工人</职业>
</病案>
</电子病历>
'EXEC sp_xml_preparedocument @idoc OUTPUT, @docSELECT * FROM OPENXML (@idoc, '/电子病历/病案',2)
WITH (姓名 varchar(20)
,性别 varchar(2)
,出生日期 datetime
,婚姻 varchar(10)
,职业 varchar(50)
)
insert @表变量 values(1)
insert @表变量 values(2)
insert @表变量 values(3)
select * from @表变量
如果是2000以下的版本可以用临时表:create table #临时表
insert #临时表 values(1)
insert #临时表 values(2)
insert #临时表 values(3)
select * from #临时表
@1 cursor varying out,
@2 cursor varying out
as
declare b cursor local for select * from table1
declare c cursor local for select * from table1
open b
open c
set @1=b
set @2=c
godeclare @a cursor,@b cursorexec a @a out,@b out
fetch @a
fetch @b
fetch @b
fetch @b
fetch @aclose @a
close @bdeallocate @a
deallocate @bdrop proc a