SQL Server 2005: подзапрос в EXEC? - PullRequest
3 голосов
/ 19 апреля 2010
EXEC [dbo].[pr_cfgAddFact] 
@SettingName = 'TransferBatch', 
@RoleFK = SELECT TOP 1 rolepk FROM cfgRole WHERE cfgRole.Name = 'SuperAdmin'

Почему SQL жалуется на предложение SELECT здесь? Я пытаюсь запустить процесс с подзапросом получения данных.

Ответы [ 2 ]

8 голосов
/ 19 апреля 2010

попробуйте это:

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

вы не можете иметь запрос в пределах EXECUTE процедуры, параметры хранимых процедур не позволяют этого. сначала выберите значение в локальной переменной, а затем передайте эту локальную переменную в хранимую процедуру.

параметрами хранимой процедуры могут быть только значения, @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 ]
    }
[;]
1 голос
/ 19 апреля 2010

Попробуйте

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

...