【问题标题】:SQL Server 2005: Subquery in EXEC?SQL Server 2005:EXEC 中的子查询?
【发布时间】:2010-04-19 12:42:39
【问题描述】:
EXEC [dbo].[pr_cfgAddFact] 
@SettingName = 'TransferBatch', 
@RoleFK = SELECT TOP 1 rolepk FROM cfgRole WHERE cfgRole.Name = 'SuperAdmin'

为什么 SQL 会抱怨这里的 SELECT 子句?我正在尝试使用获取数据的子查询来运行 proc。

【问题讨论】:

    标签: sql-server sql-server-2005 stored-procedures exec subquery


    【解决方案1】:

    试试这个:

    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
    

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

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

    EXECUTE (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 ]
        }
    [;]
    

    【讨论】:

      【解决方案2】:

      试试

      SELECT TOP 1 @RoleFK=rolepk FROM cfgRole WHERE cfgRole.Name

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 2010-09-19
        • 2023-03-11
        • 2012-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多