select * 
INTO #T
from EA01_1978INSERT INTO #T
exec zjsj '10901'SELECT DISTINCT *
FROM #T

解决方案 »

  1.   

    试试这个:if OBJECT_ID('tempdb..#temp') is not null
      drop table #tempselect * into #temp
    frm EA01_1978
    where 1=0insert into #temp
    exec zjsj '10901'select * from EA01_1978
    union
    select * from #temp
      

  2.   

    这个我已经说过,程序是第三方开发,我无法修改,而且select * from EA01_1978 
      

  3.   

    select * from EA01_1978 已经固定在第一行,我无法修改的
    而且这个语句查询出来的时候,显示的时候,只显示第一条查询查询出来的语句
    所以在写的时候不能添加 1 = 2类似的不成立条件,因为查询语句不成立只是查询不出值,而不是不执行,所以在程序显示的时候,就会是空值所以,二位的回答,无法解决我的问题,而且二位说的我也会,临时表要是能够在select * from EA01_1978之前生成就不会苦恼啦,哎
    还是多谢二位,看看有么有哪位大神能解决我的问题
      

  4.   

    你在程序里面分两次获取数据不就可以了吗,然后程序里面可以再进行datatable的拼接
      

  5.   

    么源代码啊!只能从sql上下手
      

  6.   

    么源代码啊!只能从sql上下手现在的问题是什么,你不能修改:select * from EA01_1978
    union
    exec zjsj '10901'那怎么实现你的需求呢,存储过程的结果,是不能直接union的呢
      

  7.   

    用函数不行吗?建一个函数,返回数据集的字段与表 EA01_1978 完全相同就可以了啊。例:函数ListToIntALTER function [dbo].[ListToInt](@values nvarchar(MAX), @delimiter nvarchar(10))
    returns @result table (value int)
    as
    begin
    declare @v as nvarchar(MAX);
    while charindex(@delimiter,@values) <> 0
    begin
      set @v = substring(@values,1,charindex(@delimiter,@values)-1);
      if isnumeric(@v)=1
      insert into @result
      values(@v);
      set @values = substring(@values,charindex(@delimiter,@values)+1,len(@values));
    endif isnumeric(@values)=1
    insert into @result
      values(@values);
    return;
    end
    应用:declare @tmp table
    (
      value int
      )insert into @tmp values (10);select * from @tmp
    union
    select * from ListToInt('1,2,3',',') 返回:1 row(s) affected)
    value
    -----------
    1
    2
    3
    10(4 row(s) affected)
      

  8.   

    么源代码啊!只能从sql上下手现在的问题是什么,你不能修改:select * from EA01_1978
    union
    exec zjsj '10901'那怎么实现你的需求呢,存储过程的结果,是不能直接union的呢嗯,这个我知道,所以正在求救呢嘛
      

  9.   


    是啊,要是能改源代码,我直接就一个sql语句搞定啦,何必还这么麻烦了
    现在都没辙啦
      

  10.   


    是啊,要是能改源代码,我直接就一个sql语句搞定啦,何必还这么麻烦了
    现在都没辙啦不是,我先不太明白。是哪些能修改,哪些不能修改?
      

  11.   


    是啊,要是能改源代码,我直接就一个sql语句搞定啦,何必还这么麻烦了
    现在都没辙啦不是,我先不太明白。是哪些能修改,哪些不能修改?

    哦,是select * from EA01_1978这个不能修改,而且必定是在第一行
      

  12.   

    那你现在要修改的是exec那部分?因为这样的话union all基本上是少不了了
      

  13.   

    邪恶的CSDN,引用又没提醒....
      

  14.   


    是啊,要是能改源代码,我直接就一个sql语句搞定啦,何必还这么麻烦了
    现在都没辙啦不是,我先不太明白。是哪些能修改,哪些不能修改?

    哦,是select * from EA01_1978这个不能修改,而且必定是在第一行你的意思是只能修改后面的union exec xxx 这个?
      

  15.   


    是啊,要是能改源代码,我直接就一个sql语句搞定啦,何必还这么麻烦了
    现在都没辙啦不是,我先不太明白。是哪些能修改,哪些不能修改?

    哦,是select * from EA01_1978这个不能修改,而且必定是在第一行你的意思是只能修改后面的union exec xxx 这个?是的,先前楼上有说用函数的,但是用函数就不太明白怎么用
    你有没有什么好的解决方法
      

  16.   


    是啊,要是能改源代码,我直接就一个sql语句搞定啦,何必还这么麻烦了
    现在都没辙啦不是,我先不太明白。是哪些能修改,哪些不能修改?

    哦,是select * from EA01_1978这个不能修改,而且必定是在第一行你的意思是只能修改后面的union exec xxx 这个?是的,先前楼上有说用函数的,但是用函数就不太明白怎么用
    你有没有什么好的解决方法
    其实就是,把你那个存储过程 zjsj修改成函数就行。
      

  17.   

    但是函数内部,是不能执行动态语句的,也就是不能exec执行语句的。
      

  18.   

    是啊,因为我的字段是不固定的,随时都可能改变的,所以我只能通过拼接字段来拼接语句,达到不管字段怎么改变,我的语句都能用union连接在一起,不然字段数目不同就无法拼接在一起啊
      

  19.   

    是啊,因为我的字段是不固定的,随时都可能改变的,所以我只能通过拼接字段来拼接语句,达到不管字段怎么改变,我的语句都能用union连接在一起,不然字段数目不同就无法拼接在一起啊那函数就实现不了你的功能了
      

  20.   

    是啊,因为我的字段是不固定的,随时都可能改变的,所以我只能通过拼接字段来拼接语句,达到不管字段怎么改变,我的语句都能用union连接在一起,不然字段数目不同就无法拼接在一起啊那函数就实现不了你的功能了所以我就在先前就问的怎么样才能将字段动态拼接
    但是没有回我,结果还是你接着给我回答的了哎,像我这种小菜鸟,还是sql研究的不深啊
    帖子暂时不结,看看还有没有新一点的回答解决我的问题
    麻烦各位高高手帮忙想想呢,多谢各位,预祝各位新春快乐大年30前结贴吧
      

  21.   

    不知道第一行为什么不能动,但如果纠结于Select语句与存储过程的连接办法,实在没有太好办法。有两点建议:
    1、在第一行代码之前把你的存储过程中所需要的结果全部select into 表EA01_1978;注意消除重复项。
    2、表a是不是表b的子集?表EA01_1978是不是表a与表b的子集。从他们的关系入手看看有没有办法。
      

  22.   

    不知道楼主既然改不了SQL,又是如何将语句连接上去的呢。
    不妨把 EA01_1978 表名改掉,用同名的视图代替行不?
      

  23.   

    你说的我想过的,关联是有的,但是因为变动太大,ea01_1978是翻译出来的表名,如果换一个人,可能就是ea01_111啦,这个语句是固定的模式,属于程序开发者定义的,所以字段也是需要跟着改变,变动性太大,从关联入手,基本没可能
      

  24.   

    你说的我想过的,关联是有的,但是因为变动太大,ea01_1978是翻译出来的表名,如果换一个人,可能就是ea01_111啦,这个语句是固定的模式,属于程序开发者定义的,所以字段也是需要跟着改变,变动性太大,从关联入手,基本没可能明白了,程序开发者开发的后台就是让你自己补足select * from 某个表 之后的部分。
    如果开发的后台管理是网页版的话,应该可以想办法绕过去,这需要看看从前台提交到后台的时候是不是整句提交的(也即提交的内容是否包含了select * from ea01_1978 前面这部分文字),如果是,那就想办法改网页代码,在提交前换成你想要的select * from ea01_1978 union select * from a之类的了,如果不是,修改提交内容为union后面的select * from a之类的部分看看行不行。
      

  25.   

    你说的我想过的,关联是有的,但是因为变动太大,ea01_1978是翻译出来的表名,如果换一个人,可能就是ea01_111啦,这个语句是固定的模式,属于程序开发者定义的,所以字段也是需要跟着改变,变动性太大,从关联入手,基本没可能明白了,程序开发者开发的后台就是让你自己补足select * from 某个表 之后的部分。
    如果开发的后台管理是网页版的话,应该可以想办法绕过去,这需要看看从前台提交到后台的时候是不是整句提交的(也即提交的内容是否包含了select * from ea01_1978 前面这部分文字),如果是,那就想办法改网页代码,在提交前换成你想要的select * from ea01_1978 union select * from a之类的了,如果不是,修改提交内容为union后面的select * from a之类的部分看看行不行。
    属于客户端程序,不属于网页的请求响应再返回,语言是delphi