exec( ' exec(''select top 1 f1 from #t2'') ')

解决方案 »

  1.   

    CABO(白椒腊肉):奇怪,结果还是
    f1                                                                                ------
    SELECT * FROM #t1 WHERE f1 IN ('A01')我需要的是:
    f1                                                                                -------
    A01
      

  2.   

    不知道这是不是你想要的结果!declare @s varchar(8000)
    set @s = 'exec(select top 1 f1 from #t2)'
    exec (@s)
      

  3.   

    slowpoke(慢慢來) 
    1、语法通不过
    2、不符合我的要求,因为#t2中的f1长度会超过8000,而您定义的@s最长只能为8000,我的想法是不能变量来中转。
      

  4.   

    如果能知道长度的上限的话,你可以用多个变量来中转,比如:exec (@s1 + @s2 + @s3)
      

  5.   

    slowpoke(慢慢來) :
    您说的“多个变量来中转”我也考虑过,但是向这样简单的赋值语句
    select top 1 @s=f1 from #t2,如何拆成多个变量@s1 @s2 @s3呢?总不能这样(不知是否可行?)吧:
    select top 1 @s1=SUBSTRING(f1,1,8000) from #t2
    select top 1 @s2=SUBSTRING(f1,8001,16000) from #t2
    select top 1 @s2=SUBSTRING(f1,16001,24000) from #t2
    局限也大太了。有更好办法吗?
      

  6.   

    是不是考虑把你的SQL语句串保存在外部文件中,在应用程序层上调用并执行。
      

  7.   

    try:
    set textsize 2147483647
    select @@textsizeselect * from #t2楼上的方法也不错,在前台和并STRING比在后台好!