【问题标题】: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