【问题标题】:Execute a result in SQL Server using a stored procedure使用存储过程在 SQL Server 中执行结果
【发布时间】:2012-09-05 09:11:42
【问题描述】:

我需要执行 SQL 查询的结果(已经以 SQL 的形式)本身以获得最终结果。

所以,应该是这样,在我执行的第一个查询中

Select Top(1) RequiredQuery as ReqQry from EPMaster 

我将在ReqQry 中获得另一个查询结果,然后以另一个查询的形式执行该查询以获得最终结果。

第二个查询也需要在 where 子句中传递一些参数,就像我做的那样:

Select Top(1) RequiredQuery as ReqQry 
from EPMaster 
--ReqQry after its execution returns:
Select Top(1) (FirstName + ' ' + LastName) as FullName 
from DPMaster 
where DmID = @DomainID and PnID = @PersonID

我将从我的 C# 项目的 DAL 层传递参数 @DomainID@PersonID

所以我想应该借助存储过程来完成。

------更多解释-------------

这里,一个 SQL 语句被执行以获得下一个 SQL 语句,它将是前一个语句的结果。当您执行第一个查询时,您会在结果中获得第二个查询,您再次执行以获得最终结果

第二个查询需要两个参数来执行,它们是@DomainID@PersonID,它们将从我的 C# 项目中传递给我。因此,如果我创建一个存储过程来处理所有这些并传递所需的参数,以及我项目中的第一个查询,它应该首先执行第一个查询然后执行第二个查询(使用参数PersonIDDomainID)这是作为第一次查询的结果收到的,之后我得到了最终结果。

【问题讨论】:

  • 我无法正确理解您的需求。但是您想在存储过程中使用动态 SQL 吗?
  • 这里,执行了1条SQL语句来获取下一条SQL语句,它将是前一条语句的结果。当您执行第一个查询时,您会在结果中获得第二个查询,您再次执行以获得最终结果。

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


【解决方案1】:
Declare @SQL as nvarchar(MAX);
SET @SQL = (Select Top(1)RequiredQuery as ReqQry from EPMaster);
EXEC (@SQL);

【讨论】:

  • '@SQL' 附近的语法不正确是我得到的结果
  • 尝试改用EXECUTE sp_executesql @SQL
  • 错误是你在分配给@sql时缺少“set”
  • 确实如此。我当时是在做这件事。
【解决方案2】:

您应该使用 Dynamic SQL,从第一个过程/查询中运行返回的 nvarchar(max) 查询字符串。

编辑:

DECLARE @ResultOfTheFirstQuery nvarchar(max)

SELECT @ResultOfTheFirstQuery = (Select Top(1)RequiredQuery 
                                 as ReqQry from EPMaster)

exec sp_executeSql @ResultOfTheFirstQuery

或者如果你需要一个复杂的逻辑,你可以写一个其他的SP,它可以有一个返回值:

DECLARE @ResultOfTheFirstQuery nvarchar(max)

SELECT @ResultOfTheFirstQuery = FirstStoredprocedure @params

exec sp_executeSql @ResultOfTheFirstQuery

这里已经是well answered question 如何获得参数返回。您可以使用RETURNOUTPUT 参数。

这里是sp_executeSql的使用方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多