IF OBJECT_ID('tempdb..##ScraperReportTmp') IS NOT NULL
BEGIN
DROP TABLE ##ScraperReportTmp
ENDDECLARE @SQL NVARCHAR(MAX)
DECLARE @_CutSQL NVARCHAR(MAX)
SET @_CutSQL='SELECT * FROM dbo.TFReport'
SET @SQL=
'SELECT 
*
INTO ##ScraperReportTmp FROM (
'+ @_CutSQL +'
) A'
EXEC(@SQL)
SELECT * FROM ##ScraperReportTmp以上代码中,如果@_CutSQL是一条SELECT语句,例如'SELECT * FROM dbo.TFReport',是可以的,没有任何问题。
但是,问题是如果@_CutSQL是多个SELECT语句呢?例如'SELECT * FROM dbo.TFReport SELECT * FROM dbo.TFProject',那么以上代码就会报错。所以,我的问题是,如何将多个结果集插入到临时表中,当然,我想这个临时表应该是多个临时表。谢谢!

解决方案 »

  1.   

    你在前边传入参数的时候拼接下,两个select中间用union连接。
      

  2.   

    'SELECT * FROM dbo.TFReport union all SELECT * FROM dbo.TFProject'
      

  3.   

    INTO ##ScraperReportTmp--改為
    Create table #ScraperReportTmpinsert #ScraperReportTmp EXEC(@SQL)
      

  4.   

    传入的参数如'SELECT * FROM dbo.TFReport union all SELECT * FROM dbo.TFProject'注意两个select的字段数目,字段数据类型
      

  5.   

    你多个select语句是各自分开的
    本省从语法上就是错误的
      

  6.   

    SET @_CutSQL='SELECT * FROM dbo.TFReport union all select * from dbo.othertable1 union all select * from dbo.othertable2 union all...'
    SET @SQL=
        'SELECT 
            *
        INTO ##ScraperReportTmp FROM (
            '+ @_CutSQL +'
        ) A'
    EXEC(@SQL)
    SELECT * FROM ##ScraperReportTmp
      

  7.   

    谢谢以上各位的回复,不过客户的要求就是这样的,就是多条的SELECT命令,而且他们之间可能没有任何联系,不能用UNION连接的
      

  8.   

    如果是程序端需要
    多个结果集合
    程序端
    dataset会自动分成table(0),table(1),...
    不用临时表
      

  9.   


    首先,感谢回复!但是,真的没有办法使用SQL来回去吗?非要通过程序(C#,VB)来获取吗?其实,我想,只要SQL SERVER能够自动分析出给定的SQL字符串是几个结果集就应该有希望办到的
      

  10.   

    有时候用程序去实现
    比SQL更方便
    为什么不用呢
      

  11.   


    真的不能用SQL实现吗?谢谢。
      

  12.   

    如果这些查询语句所得的结果的列结构相同,只要直接执行就行了:
    create table t1(id int,col varchar(10))
    insert into t1 select 1,'aaa'
    insert into t1 select 2,'bbb'
    create table t2(abc int,def varchar(10))
    insert into t2 select 243,'fawed'
    insert into t2 select 12344,'bbasdwaeb'
    create table t3(faew int,faead varchar(10))
    insert into t3 select 64523,'vasdf'
    insert into t3 select 23,'fq34fd'
    go
    create procedure unionallrecord(
    @sql1 nvarchar(max),
    @sql2 nvarchar(max),
    @sql3 nvarchar(max)
    --如还有,继续
    )as
    begin
    exec(@sql1)
    exec(@sql2)
    exec(@sql3)
    --如还有,继续
    end
    go
    create table #t(id int,col varchar(10))
    insert into #t
    exec unionallrecord 'select * from t1','select * from t2','select * from t3'select * from #t
    /*
    id          col
    ----------- ----------
    1           aaa
    2           bbb
    243         fawed
    12344       bbasdwaeb
    64523       vasdf
    23          fq34fd(6 行受影响)*/
    go
    drop table t1,t2,t3,#t
    drop procedure unionallrecord
      

  13.   


    可以,不推薦可用xml,把結果集分別生成xml,再返回。