DB名称作为用户定义函数中的参数

时间:2014-01-15 16:51:04

标签: sql-server

是否可以在用户定义的函数中使用DB name作为参数?

例如,我尝试使用连接,但它不能以这种方式工作:

create function fn_getEntityOwners (@dbName varchar, @entityId bigint)
returns table
as
return 
select
    OWNERS.USER_ID 
from 
    @dbName + '.dbo.OWNERS' as OWNERS
where 
    OWNERS.ENTITY_ID = @entityId

更新:我使用sql server

3 个答案:

答案 0 :(得分:3)

将函数中的代码放入字符串中并通过动态sql执行

DECLARE @SQL varchar(2000)

SELECT @SQL = 

'select
    OWNERS.USER_ID 
from 
    ' + @dbName + '.dbo.OWNERS as OWNERS
where 
    OWNERS.ENTITY_ID = ' + @entityId


EXEC(@SQL)

答案 1 :(得分:1)

您需要使用动态SQL来执行此操作。这是什么DB? Here's另一个与之相关的SO问题

答案 2 :(得分:0)

您也可以使用sqlcmd模式(在Management Studio的“查询”菜单中启用此功能)。

:setvar dbname "TEST.dbo.OWNERS" 

select
    OWNERS.USER_ID 
from 
    $(dbname) as OWNERS
where 
    OWNERS.ENTITY_ID = @entityId

<小时/> ......这个解决方案由Stack Overflow ...

带给您
  

whatup @DominionDave - 很高兴有你参加SO-playa :-D