1

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クエリを個別に実行した場合、レコードのリストを取得しているときに上記の値を取得するのは1つだけです。動的SQLの実行によって返された値のリストを保存するにはどうすればよいですか?そしてレコードを返します..そしてレコードを返します..しかしこれは

4

2 に答える 2

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!
于 2010-09-08T22:11:39.400 に答える
1

の結果を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自体で作成された一時テーブルは、実行が終了するとすぐにスコープ外になります)

于 2010-09-08T22:14:57.777 に答える