【问题标题】:How to store a multiple or a list of values returned from sp_executesql?如何存储从 sp_executesql 返回的多个值或值列表?
【发布时间】:2011-04-09 23:50:10
【问题描述】:

UPDATE : This is what I did -

   set @dyn_sql = '
                        select
                                @UserName=UserName
                        from
                        (
                        select 
                                E.ID as EmployeeID,
                                E.UserName as Username
                            from   
                                Leaderboard K
                                    inner join Employee E on  K.EmployeeId = E.Id
                                    inner join INFO KD on KD.EmployeeId=E.Id
                                    where  E.CompanyId=4
                         ) as d1'
DECLARE @leaderboards TABLE
( 
 UserName varchar(50)
) 
set @params='@Employee_Id int, @UserName varchar(200) OUTPUT'
INSERT INTO @leaderboards (UserName)
EXEC sp_executesql @dyn_sql, @params,@EmployeeId=@Employee_Id OUTPUT,@UserName = @User_Name OUTPUT

SELECT * from @leaderboards

But this is not returning records although if I see the query is right and returns records..


大家好,我正在使用 sp_executesql 执行动态 sql 语句,这就是我目前正在做的事情 -

EXEC sp_executesql @dyn_sql, @params,@EmployeeId=@Employee_Id OUTPUT,@UserName = @User_Name OUTPUT

SELECT @Employee_Id AS EmployeeId,@User_Name AS UserName

但是,如果我单独运行动态 sql 查询,则当我获取记录列表时,上述内容只能获取单个值。如何存储执行动态 sql 返回的值列表? 并返回记录..并返回记录..但这

【问题讨论】:

  • 您的 @params 声明中缺少单引号。还有你的动态 SQL 是什么样的?
  • 我已经添加了动态sql...谢谢..
  • 为什么要使用动态sql?为什么要传递您在动态 sql 中不使用的参数?
  • 嗯...抱歉造成混淆,但我对实际查询的更改很少...我正在使用动态查询,因为我根据传递给存储过程的内容附加了各种 where 子句。 .并且我将 EmployeeId 参数作为使用它的 where 子句之一传递...

标签: sql-server sql-server-2008 dynamic-sql sp-executesql


【解决方案1】:

通过临时表。

[更新]

declare @sql nvarchar(max)
  set @sql = '
select 
    E.ID as EmployeeID, --doesn't really matter how you name them, it's the order that matters
    E.UserName as Username -- and this order should match the order of columns in the insert statement
from   
    Leaderboard K
        inner join Employee E on  K.EmployeeId = E.Id
        inner join INFO KD on KD.EmployeeId=E.Id
        where  E.CompanyId=4
'
DECLARE @LeaderBoard TABLE
( 
    EmployeeId int, 
    UserName varchar(50)
) 
INSERT INTO @LeaderBoard (EmployeeId, UserName)
exec sp_executesql @sql

select * from @LeaderBoard

--Hurray, we made it!

【讨论】:

    【解决方案2】:

    您可以将EXEC sp_executesql 的结果插入到临时表或表变量中。

    DECLARE  @t TABLE
    (
    a INT,
    b INT
    )
    INSERT INTO @t (a,b)
    EXEC sp_executesql N'SELECT 1, 2 UNION SELECT 3, 4 '
    

    或者,动态 SQL 可以访问在父作用域中声明的临时表(但在动态 SQL 本身中创建的任何临时表将在执行完成后立即超出作用域)

    【讨论】:

    • 我否决了这个答案,因为这不是 OP 所要求的。
    • @Denis - 您是否以某种方式声称这不能回答“如何存储从 sp_executesql 返回的多个值或值列表?”的问题?
    • 我声称如果你按原样运行它不会解决任何问题。显然,您对别人的答案有疑问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    相关资源
    最近更新 更多