1:不行
2:可以用表啊,将N条SQL语句存入表中,在存储过程中调用该表的内容即可
3:用N个变量

解决方案 »

  1.   

    create proc xx
    @a text
    as
    exec(@a)
    go
    --调用:
    exec xx 'select * from ...  update ... insert...'
      

  2.   

    也可以用xml如:DECLARE @idoc int,@doc varchar(8000)SET @doc ='
    <?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)
    )
      

  3.   

    如果是过程内部可以用表变量代替:declare @表变量 table(a int)
    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 #临时表
      

  4.   

    也可以用游标: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