Sql 使用变量在EXEC命令中查询
如何获取变量中的值:Sql 使用变量在EXEC命令中查询,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何获取变量中的值: DECLARE @Query NVARCHAR(MAX) DECLARE @CurrentModuleUsers INT SET @Query = 'SELECT @CurrentModuleUsers = Count(UR.UserId)'+ ' FROM [dbo].[aspnet_UsersInRoles] AS UR '+ ' INNER JOIN [dbo].[aspnet_Roles] AS R
DECLARE @Query NVARCHAR(MAX)
DECLARE @CurrentModuleUsers INT
SET @Query = 'SELECT @CurrentModuleUsers = Count(UR.UserId)'+
' FROM [dbo].[aspnet_UsersInRoles] AS UR '+
' INNER JOIN [dbo].[aspnet_Roles] AS R ON UR.RoleId = R.RoleId '+
' INNER JOIN [dbo].[aspnet_Users] AS U ON UR.UserId = U.UserId '+
' WHERE LOWER(RoleName) IN ( ' +
' SELECT LOWER([Role]) '+
' FROM ADMIN_ROLEACCESS '+
')'
EXEC(@query)
print @CurrentModuleUsers
错误:
必须声明标量变量“@CurrentModuleUsers”
请帮我解决这个问题 使用sp_executesql而不是exec()
为什么需要在这里使用动态sql?我认为没有必要这样做使用sp_executesql而不是exec()
为什么需要在这里使用动态sql?我认为没有必要这样做在您的情况下不需要动态sql。您可以使用简单的选择直接获得计数
DECLARE @CurrentModuleUsers INT
SELECT @CurrentModuleUsers = Count(UR.UserId)
FROM [dbo].[aspnet_UsersInRoles] AS UR
INNER JOIN [dbo].[aspnet_Roles] AS R ON UR.RoleId = R.RoleId
INNER JOIN [dbo].[aspnet_Users] AS U ON UR.UserId = U.UserId
WHERE LOWER(RoleName) IN (
SELECT LOWER([Role])
FROM ADMIN_ROLEACCESS
)
PRINT @CurrentModuleUsers
在您的案例中不需要动态sql。您可以使用简单的选择直接获得计数
DECLARE @CurrentModuleUsers INT
SELECT @CurrentModuleUsers = Count(UR.UserId)
FROM [dbo].[aspnet_UsersInRoles] AS UR
INNER JOIN [dbo].[aspnet_Roles] AS R ON UR.RoleId = R.RoleId
INNER JOIN [dbo].[aspnet_Users] AS U ON UR.UserId = U.UserId
WHERE LOWER(RoleName) IN (
SELECT LOWER([Role])
FROM ADMIN_ROLEACCESS
)
PRINT @CurrentModuleUsers
是的,但实际上我在同一台服务器上处理各种不同的数据库,数据库名称被传递给过程,并且必须构建动态查询。不知道您是否对此有一些想法。是的,但我实际上在同一台服务器上处理各种不同的数据库,数据库名称被传递给过程,并且必须构建动态查询。想知道你是否对此有一些想法。