Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用变量在EXEC命令中查询_Sql_Sql Server_Tsql - Fatal编程技术网

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

是的,但实际上我在同一台服务器上处理各种不同的数据库,数据库名称被传递给过程,并且必须构建动态查询。不知道您是否对此有一些想法。是的,但我实际上在同一台服务器上处理各种不同的数据库,数据库名称被传递给过程,并且必须构建动态查询。想知道你是否对此有一些想法。