Как сохранить несколько или список значений, возвращаемых из sp_executesql? - PullRequest
1 голос
/ 09 сентября 2010

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..


Привет всем, я выполняю динамический оператор SQL, используя sp_executesql, и это то, что я делаю в настоящее время -

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-файла?и возвращает записи .. и возвращает записи .. Но это

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Вы можете вставить результаты 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, выйдет из области действия после завершения выполнения)

1 голос
/ 09 сентября 2010

Через временную таблицу.

[Обновить]

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!
...