declare @strsql nvarchar(2000)
declare @strsqlwhere nvarchar(1000)set @strsql='select * from ... '
set @strsqlwhere='...'
set @strsql=@strsql+' where '+@strsqlwhereexec (@strsql)

解决方案 »

  1.   

    建议使用一个全局临时表吧,##tablename
      

  2.   

     create table #temp1 (    
    ...
      )
    declare @strsql nvarchar(2000) 
    declare @strsqlwhere nvarchar(1000) set @strsql=''insert into #temp1 select * from ... ' 
    set @strsqlwhere='...' 
    set @strsql=@strsql+' where '+@strsqlwhere exec (@strsql) 
      

  3.   

    我也是和3楼想的一样,可是我执行的动态SQL是一个行列转换,列不是固定的,所以临时表也不好建立啊
      

  4.   

    CREATE PROCEDURE dbo.myproc
       @someFilter varchar(50)
    AS
       declare @mySql varchar(1024)   --1.定义临时表
       IF object_id('tempdb..#tmpCustomer') IS NOT NULL
    DROP TABLE #tmpCustomer
       CREATE TABLE #tmpCustomer(
    [CustomerNo] [CHAR] (6),
            [OrderNo] [CHAR] (12)
       ) ON [PRIMARY]   --2.写入临时表
       set @mySql='INSERT INTO #tmpCustomer(CustomerNo,OrderNo) '
       set @mySql=mySql + 'Select a.CuatomerNo,b.OderNo FROM ...'''+@someFilter+'''
       EXEC(@mySql)   --3.操作临时表
       ...
      

  5.   

     INSERT  into 表 Exec  Proc