我的存储过程中有个 这么一句话: LEFT JOIN UFDATA_015_2010.dbo.Inventory AS q ON a.Stockcode=q.cInvCode就是 :UFDATA_015_2010 。但这个不是一个固定的帐号,隔一段时间就会换帐号,比如017,108 这样的,想在我想要一个方 法能够不进入存储过程里面,而改变帐号的。 求一个方法 谢了
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 ...')
UFDATA_015_2010--》 这个地方换成参数 传进来
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)
这句话我写了个标量函数 传进去 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
但是报错了 求解
好像人用动态语名才行,要这样写: 'LEFT JOIN '+(SELECT dbo.GetUFDATA()) + 'AS q ON a.Stockcode=q.cInvCode'
要用字符串拼接拉 類似 declare @sql nvarchar(2000) set sql='select * from ' +dbo.GetUFDATA() exec sql
select @1 = ?, @2 = ?
exec ('... LEFT JOIN UFDATA_'+@1+'_'+@2+'.dbo.Inventory AS q ON a.Stockcode=q.cInvCode ...')
这个地方换成参数
传进来
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)
唉!应为sql非常长所以不在页面里写,所以这样传值还是有点不方便,我就想问问 有没有比标量函数更好的方法解决,同是会有多个sql用到这个方法
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
但是报错了 求解
'LEFT JOIN '+(SELECT dbo.GetUFDATA()) + 'AS q ON a.Stockcode=q.cInvCode'
類似
declare @sql nvarchar(2000)
set sql='select * from ' +dbo.GetUFDATA()
exec sql
(1)是不是你执行SQL语句的地方和UFDATA_015_2010.dbo.Inventory不在同一个库
(2)标量函数不在你引用的那个库中
sql语句是在TBROT 这个数据库里执行的和UFDATA_015_2010.dbo.Inventory不在同一个库里