SQL Serverで動的SQLクエリを実行して値を返す関数を作成しました。 (@ModuleNameに関連付けられているユーザーの戻り数):SQL関数のSQL Server execute(sp_executesql)コマンド
のみの機能といくつかの拡張ストアドプロシージャ、関数
関数内から実行することができます。私は、SQLクエリ内の関数を呼び出すときにエラーを取得しています
DECLARE @Query NVARCHAR(MAX)
DECLARE @Result int
DECLARE @UsersUsingModule AS NVARCHAR(99)
SET @Query = 'SELECT @UsersUsingModule = Count(UR.UserId) '+
'FROM '[email protected]+'.[dbo].[aspnet_UsersInRoles] AS UR '+
'INNER JOIN '[email protected]+'.[dbo].[aspnet_Roles] AS R ON UR.RoleId = R.RoleId '+
'INNER JOIN '[email protected]+'.[dbo].[aspnet_Users] AS U ON UR.UserId = U.UserId '+
'WHERE LOWER(RoleName) IN ('+
'SELECT LOWER([Role]) '+
'FROM ADMIN_ROLEACCESS '+
'WHERE LOWER(ModuleName) = LOWER(@ModuleName) '+
')'
EXEC sp_executesql @Query, N'@ModuleName nvarchar(max), @UsersUsingModule INT OUTPUT', @ModuleName, @UsersUsingModule OUTPUT
SELECT @Result = CAST(@UsersUsingModule as INT)
RETURN @Result
問合せ:
SELECT
M.ID as [ModuleID], M.ModuleName, CC.UserLicenses,
dbo.fncRolesWithModule(M.ModuleName) AS [Roles],
[dbo].[fncUsersUsingModule](M.ModuleName, 'USERS_Demo2016')
FROM
ADMIN_ClientsContracts as CC
INNER JOIN
ADMIN_Modules as M ON CC.ModuleID = M.ID
WHERE
CC.Isactive = 1
より良いアプローチがあれば教えてください!
は」(http://stackoverflow.com/questions/15180561/getting-an-error-when-executing-a-dynamic-sql-within-a-function-sql-serverを見てくださいこの')。役立つかもしれません :) –