我的存储过程中有个 这么一句话:  LEFT JOIN  UFDATA_015_2010.dbo.Inventory  AS q ON  a.Stockcode=q.cInvCode就是 :UFDATA_015_2010 。但这个不是一个固定的帐号,隔一段时间就会换帐号,比如017,108 这样的,想在我想要一个方
法能够不进入存储过程里面,而改变帐号的。
求一个方法 谢了

解决方案 »

  1.   

    用动态sql处理,传入参数即可。
      

  2.   

    declare @1 varchar(100), @2 varchar(100)
    select @1 = ?, @2 = ?
    exec ('... LEFT JOIN UFDATA_'+@1+'_'+@2+'.dbo.Inventory AS q ON a.Stockcode=q.cInvCode ...')
      

  3.   

    UFDATA_015_2010--》
    这个地方换成参数
    传进来
      

  4.   

    DECLARE @dbname VARCHAR(10)
    SET @dbname='[master]'
    EXEC ('select top 3 * from ' + @dbname+'.dbo.spt_values')name                                number      type low         high        status
    ----------------------------------- ----------- ---- ----------- ----------- -----------
    rpc                                 1           A    NULL        NULL        0
    pub                                 2           A    NULL        NULL        0
    sub                                 4           A    NULL        NULL        0(3 row(s) affected)
      

  5.   


    唉!应为sql非常长所以不在页面里写,所以这样传值还是有点不方便,我就想问问 有没有比标量函数更好的方法解决,同是会有多个sql用到这个方法
     
      

  6.   

    这句话我写了个标量函数 传进去  
      LEFT JOIN  (SELECT dbo.GetUFDATA()) AS q ON  a.Stockcode=q.cInvCodedbo.GetUFDATA())  的值就是
     LEFT JOIN UFDATA_015_2010.dbo.Inventory AS q ON a.Stockcode=q.cInvCode 中的  UFDATA_015_2010.dbo.Inventory 
       

    但是报错了 求解
      

  7.   

    好像人用动态语名才行,要这样写:
    'LEFT JOIN '+(SELECT dbo.GetUFDATA()) + 'AS q ON a.Stockcode=q.cInvCode'
      

  8.   

    要用字符串拼接拉
    類似
    declare @sql nvarchar(2000)
    set sql='select * from ' +dbo.GetUFDATA()
    exec sql
      

  9.   

     把这个位置(UFDATA_015_2010)换成一个参数传入就行了!
      

  10.   

    用动态sql处理,将表名作为参数
      

  11.   

    可能原因:
    (1)是不是你执行SQL语句的地方和UFDATA_015_2010.dbo.Inventory不在同一个库
    (2)标量函数不在你引用的那个库中
      

  12.   


    sql语句是在TBROT 这个数据库里执行的和UFDATA_015_2010.dbo.Inventory不在同一个库里