在MS SQL Server 2012 SP1,當我執行:即席SQL和內聯函數給出不同的結果
SELECT rt.RoleId, ur.RoleName, app.ApplicationName
FROM [TV_ClientPortal].[dbo].[UserRoleTie] rt
JOIN [TV_ClientPortal].[dbo].[UserRoles] ur
ON rt.RoleId = ur.RoleId
JOIN [TV_ClientPortal].[dbo].[Applications] app
ON app.ApplicationId = ur.ApplicationId
WHERE rt.UserId = 255 AND
('SalesCRM' IS NULL OR app.ApplicationName = 'SalesCRM')
我得到一個排。現在,我就寫出了一個內聯函數:
CREATE FUNCTION dbo.Func_GetRolesForUser
(
@UserId int,
@AppName varchar
)
RETURNS TABLE
AS
RETURN
(
SELECT rt.RoleId, ur.RoleName, app.ApplicationName
FROM [TV_ClientPortal].[dbo].[UserRoleTie] rt
JOIN [TV_ClientPortal].[dbo].[UserRoles] ur
ON rt.RoleId = ur.RoleId
JOIN [TV_ClientPortal].[dbo].[Applications] app
ON app.ApplicationId = ur.ApplicationId
WHERE rt.UserId = @UserId AND
(@AppName IS NULL OR app.ApplicationName = @AppName)
)
GO
但是,當我執行
SELECT * FROM dbo.Func_GetRolesForUser(255, 'SalesCRM')
我沒有得到任何結果。任何想法爲什麼這可能是這種情況?我想過許可問題,但據我所知,我有完全許可執行該功能。
這絕對是答案。我已經驗證該解決方案的工作原理。 – prmph