创建存储过程,将表作为存储过程的参数传入。
像:
declare @databasename varchar(30),            
 @sql varchar(Max)set @databasename = 'dataUnqName'
set @sql = 'select * from '''+@databasename +'''.dbo.tablename'
不可以,因为查询里面包含有'',请问这该怎么办?
我的积分不多,谢谢!sqlserver存储

解决方案 »

  1.   

    引号太多了。
    改成:
    set @sql = 'select * from ' + @databasename + '.dbo.tablename'
      

  2.   

    declare @databasename varchar(30),            
     @sql varchar(64)set @databasename = 'dataUnqName'
    set @sql = 'select * from '+@databasename +'.dbo.tablename'
    exec(@sql)
    1、没必要varchar(max)吧
    2、也没必要那么多引号。
    3、需要最后加上exec
      

  3.   

    我是如果是"slect * ”里面的字段太多,有许多用不上,还要求积,求和,再分页排序
    我不会。
    需要里面字段先进行求积,积之后求和,和之后排序根据每种产品的前十名。
    如果不使用''字段不会出现下一次引用不上。
      

  4.   

    每张表的数据都是15万~200万之间,我写的效率布
    A表:
    A1(日)  B1  C1  D1  E1  F1 ... Y1
    a       b   c   d   e   f  ... Y1
    是与A(上一版)表相同的表结构,数据不一致
    B表:
    A1(日)  B1  C1  D1  E1  F1 ... Y1
    a1       b1  c1  d1  e1  f1 ... Y1--上一版有C1,这一版没有的C1
    select SUBSTRING(CONVERT(VARCHAR(19),a.A1,120),1,7) as 'A1' ,a.B1,a.C1  from A as a
    where not Exists(
    select 1 from B as b
    where SUBSTRING(CONVERT(VARCHAR(19),a.A1,120),1,7)+'_'+a.B1+'_'+a.C1=SUBSTRING(CONVERT(VARCHAR(19),b.A1,120),1,7)+'_'+b.B1+'_'+b.C1
    )
    --上一版存在C1,在新版中不存在D1
    select SUBSTRING(CONVERT(VARCHAR(19),a.A1,120),1,7),a.B1,a.C1,a.D1 from A as a
    where not Exists(
    select 1 from B as b
    where SUBSTRING(CONVERT(VARCHAR(19),a.A1,120),1,7)+'_'+a.B1+'_'+a.C1+'_'+a.D1=SUBSTRING(CONVERT(VARCHAR(19),b.A1,120),1,7)+'_'+b.B1+'_'+b.C1+'_'+b.D1)
    --A表与B表相同D1列和C1列的E1列的总量和C1列的条数(所有的都穷举出来)
    select a.A1 as'Old_A1',a.B1 as 'Old_B1' ,a.C1 as 'Old_C1',a.D1 as 'Old_D1',a.E1 as 'old_E1',b.A1 as'new_A1',b.B1 as 'new_B1' ,b.C1 as 'new_C1',b.D1 as 'new_D1',b.E1 as 'new_E1'
    into #rr1 from (
    select a.A1,a.B1,a.C1,count(a.C1) as 'C1',a.D1,sum(a.E1)as'Total_Quantity' from (
    select SUBSTRING(CONVERT(VARCHAR(19),A1,120),1,7) as 'A1',B1,C1,D1,convert(decimal(18,2),E1)as 'E1' from A
    ) as a
    group by a.A1,a.B1,a.C1,a.D1
    ) as a
    FULL OUTER JOIN 

     select a.A1,a.B1,a.C1,count(a.C1) as 'C1',a.D1,sum(a.E1)as'E1' from (
    select SUBSTRING(CONVERT(VARCHAR(19),A1,120),1,7) as 'A1',B1,C1,D1,convert(decimal(18,2),E1)as 'E1' from B
    ) as a
    group by a.A1,a.B1,a.C1,a.D1
    ) as b
    on a.A1=b.A1 and a.B1=b.B1 and a.C1=b.C1 and a.D1=b.D1--大于
    select *, 'Y' as mo into #yy1 from #rr1
    where Old_E1>new_E1
    insert into #yy1 
    select *,'N' as mo  from #rr1
    where Old_E1=new_E1 or Old_E1<new_E1--小于
    select * ,  'Y' as amp into #yy2 from #yy1
    where Old_E1<new_E1
    insert into #yy2 
    select *,'N' as amp  from #yy1
    where Old_E1=new_E1 or Old_E1>new_E1--相等
    select *,'Y' as eq into #yy3 from #yy2
    where Old_E1=new_E1
    insert into #yy3
    select *,'N' as eq  from #yy2
    where Old_E1<new_E1 or Old_E1>new_E1select Old_A1 ,Old_B1 ,Old_C1,Old_D1,old_E1,new_A1,new_B1,new_C1 ,new_D1,new_E1,eq as '=',mo as'>',amp as'<'
    from #yy3
    其他的不用了,将这三个尽量缩短时间,尽量在存储过程里面,展示。