2016-08-22 23 views
1

我想从存储过程中调用用户定义的函数,是否可以根据当前登录的用户动态调用它?调用函数时选择当前用户模式T-SQL

例如,我试图执行这样的用户定义函数。

SELECT SCHEMA_NAME().ITEM_CNT(8,1315) 

其中SCHEMA_NAME()是当前登录的用户模式。

回答

0

只能使用动态SQL才能做到这一点。

DECLARE @SQL NVARCHAR(100); 

SET @SQL = N' 
    SELECT ' + QUOTENAME(SCHEMA_NAME()) + '.ITEM_CNT(8, 1315);'; 

EXECUTE sp_executesql @SQL; 

如果您需要使用由函数返回的值,稍后可以将它插入到临时表中,然后查询它。

类似的东西:

DECLARE @SQL NVARCHAR(200); 

CREATE TABLE #ITEM_CNT 
(
    RESULT INT 
); 

SET @SQL = N' 
    INSERT INTO #ITEM_CNT (RESULT) 
    SELECT ' + QUOTENAME(SCHEMA_NAME()) + '.ITEM_CNT(8, 1315);'; 

EXECUTE sp_executesql @SQL; 

SELECT RESULT 
FROM #ITEM_CNT;