我有2个存储过程 p_a和p_b
p_b有一个入参 @date datetime类型
p_b最后是一个select * 的结果集,有4列我直接
exec p_b @datein='2010-11-03'没有问题,能看到4列的结果集然后在p_a里面先建一个格式完全正确的临时表,也是4列,
再在p_a里面这样
insert into #tmp
exec p_b @datein='2010-11-03'
就报错'消息 0,级别 11,状态 0,第 0 行
当前命令发生了严重错误。应放弃任何可能产生的结果。'如果我在p_a里面
insert into #tmp
exec p_b
则不会报错,当然,因为没有给入参,所以没有任何结果会被插入到临时表#tmp中
好像是带了参数就不行,求解啊

解决方案 »

  1.   

    insert into #tmp
    exec p_b (@datein='2010-11-03')可以吗?
      

  2.   

    可以试试,定义每一个对应的列,用openrowset
      

  3.   

    DECLARE @dateinn DATETIME
    SET @dateinn ='2010-11-03'INSERT INTO #tmp
    SELECT *
    from 
    OPENROWSET
    ('sqloledb','Trusted_Connection=yes;Database=mydb',
    'SET FMTONLY OFF;set nocount on;exec p_b @datein=@dateinn') AS a报错链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "无法完成延迟准备。"。
    消息 8180,级别 16,状态 1,第 1 行
    未能准备语句。
    消息 137,级别 15,状态 2,第 1 行
    必须声明标量变量 "@dateinn"。
      

  4.   

    你可以用 insert into 表 exec ...或者
    select * into 表 from openrowset(...)--先要建立表#temp,然后
    insert #temp(col...)
    exec exec p_b @datein='2010-11-03' --两个exec
    --注意字段的对应
      

  5.   

    楼主这样好像是不行:你是想在p_a 中建立临时表 #tmp 在p_b 中访问临时表 是吧?
    而你说的insert into #tmp  exec p_b 没有报错是因为:你没有输入参数,p_b跟根本就没有访问 #tmp 
    所以没有报错!
      

  6.   

    @datein是你在p_b里定义的,你怎么能在p_a里使用呢?
      

  7.   

    @datein是我在p_a里面定义的,可是要传递给p_b存储过程的参数啊
      

  8.   

    自己试了一下,未发现有错。
    语法无错,估计是不小心输入的看不见的中文字符,如中文空格。查看返回结果集有无问题在存储过程中去注释掉
    --insert into #tmp
    单执行exec p_b @datein='2010-11-03'
    看看有无问题