SQL Server 2005:EXEC中的子查询?

Ian*_*ink 3 sql-server stored-procedures sql-server-2005 exec subquery

EXEC [dbo].[pr_cfgAddFact] 
@SettingName = 'TransferBatch', 
@RoleFK = SELECT TOP 1 rolepk FROM cfgRole WHERE cfgRole.Name = 'SuperAdmin'
Run Code Online (Sandbox Code Playgroud)

为什么SQL会在这里抱怨SELECT子句?我试图用子查询获取数据运行proc.

KM.*_*KM. 8

试试这个:

DECLARE @RoleFK_value    {datatype here}
SELECT TOP 1 @RoleFK_value=rolepk FROM cfgRole WHERE cfgRole.Name = 'SuperAdmin'

EXEC [dbo].[pr_cfgAddFact] 
@SettingName = 'TransferBatch', 
@RoleFK = @RoleFK_value
Run Code Online (Sandbox Code Playgroud)

你不能在程序的EXECUTE内进行查询,存储过程的参数不允许这样做.首先,首先将值选择到局部变量中,然后将该局部变量传递给存储过程.

存储过程参数可能只是值,@变量或关键字DEFAULT,这意味着不允许查询和表达式.

执行(Transact-SQL)

Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }
        ]
      [ ,...n ]
      [ WITH RECOMPILE ]
    }
[;]
Run Code Online (Sandbox Code Playgroud)