2010-09-08 16 views
1

UPDATE : This is what I did -Comment stocker un multiple ou une liste de valeurs renvoyées à partir de sp_executesql?

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,@[email protected]_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..


Salut à tous, j'exécute une instruction SQL dynamique sp_executesql et c'est ce que je fais actuellement -

EXEC sp_executesql @dyn_sql, @params,@[email protected]_Id OUTPUT,@UserName = @User_Name OUTPUT 

SELECT @Employee_Id AS EmployeeId,@User_Name AS UserName 

Mais ce qui précède obtient seulement moi une seule valeur quand je reçois une liste d'enregistrements si je cours la question SQL dynamique individuellement. Comment Je stocke la liste des valeurs renvoyées par l'exécution de mon SQL dynamique? et renvoie les enregistrements .. et renvoie les enregistrements..Mais ce

+0

http: //stackoverflow.com/questions/230449/calling-a-stored-proc-from-within-a-stored-proc-and-returning-a-recordset/230468#230468 – Ant

+0

Il vous manque une citation unique de fermeture dans votre Déclaration @params. Aussi, à quoi ressemble votre SQL dynamique? –

+0

J'ai ajouté le SQL dynamique ... merci .. – Vishal

Répondre

1

Via une table temporaire.

[Mise à jour]

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! 
+0

S'il vous plaît voir ma mise à jour ... J'avais encore quelques problèmes .. – Vishal

1

Vous pouvez insérer les résultats de EXEC sp_executesql dans une table temporaire ou variable de table.

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

Ou bien le SQL dynamique peut accéder à une table temporaire déclarée dans le domaine parent (mais une table temporaire créée dans le SQL dynamique lui-même sera hors de portée dès que l'exécution se termine)

+0

S'il vous plaît voir ma mise à jour ... J'avais encore quelques problèmes .. – Vishal

+0

Je downvoted cette réponse parce que cette n'est pas ce que le PO a demandé. –

+0

@Denis - Voulez-vous prétendre que cela ne répond pas à la question "Comment stocker un multiple ou une liste de valeurs renvoyées par sp_executesql?" –