2011-08-09 9 views
-1
DECLARE @EmployeeList varchar(100) 
SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + CAST(Emp_UniqueID AS  varchar(5)) FROM SalesCallsEmployees WHERE SalCal_UniqueID = 1 
SELECT @EmployeeList` 

これを見て、行をCSVに連結しました。私は動的クエリを使用してこれをしてください助けてください。動的クエリを使用して行を連結する方法は?

これを動的クエリに書き込むにはどうすればよいですか?私はそれに取り組んでいますが、私はそれを理解することはできません...

私を助けてください。以下は、私はすでに

Declare @LGroup varchar(max); 
declare @DbName varchar(100); 
set @DBName='Device_tenant'; 
set @LGroup ='COALESCE('''[email protected]+''' + '','','''')'+' UserName  FROM '[email protected]+'.dbo.dvcmgmt_UserMaster' 
exec (@LGroup) 
select (@LGroup) 
print @LGroup 
print @DBName` 

を試してみました、私は上記のためにnull値を取得しています何の例は、私が上記のために、無効なエラーを取得しています

Declare @LGroup varchar(max); 
declare @DbName varchar(100); 
set @DBName='Device_tenant'; 
set @LGroup ='(COALESCE('''[email protected]+''' + '','','''') '+' Convert(nvarchar (10),'+UserID+'))' +' FROM '[email protected]+'.dbo.dvcmgmt_UserMaster' 
exec (@LGroup) 
select (@LGroup) 
print @LGroup 
print @DBName` 

...です。

答えて

0
Declare @string nvarchar(max); 

set @string =N'select @LGroup=COALESCE(@LGroup+ '','','''') + Convert(nvarchar (10),UserID) FROM '[email protected]+'.dbo.dvcmgmt_UserMaster; print @LGroup;' 

execute sp_executesql @[email protected],@Params=N'@LGroup nvarchar(max)  OUTPUT',@[email protected] Output 
1

@LGroupは、実行するSQLであるため、連結の値を持ちません。

sp_executesqlを使用しない限り、動的SQLから値を渡すことはできません。 @Jnkと@Aaronは本当にあなた...

を指摘したように

+2

1 - そして、あなたは、動的SQLについて多くは、あなたはおそらくそれを使用すべきではない、それは一歩容易にするために、リンクでは呪いと動的SQL – JNK

+1

の祝福を読む必要があることを理解していない場合: http://www.sommarskog.se/dynamic_sql.html –

1

にあなたが必要があるとしている主な問題を「The Curse and Blessings of Dynamic SQL」の決定的なを読んでください、この

Editを使用して書き換えますここでは、クエリから単一の変数を渡すだけなので、非常に高速になるようになる複数行のデータを扱っている場合です。

また、私は決して1つの宣言された変数にクエリの結果全体を挿入しようとしたことはありません。私ができることは、あなたが望むものを照会しようとする正しい構文を示し、あらかじめ書かれたSQLステートメントから変数を戻す方法を示すことです。

DECLARE @Bound DATETIME, @Rows INT 
SELECT @Bound = '1/1/2011' 

SELECT @SQL = N'(SELECT @RowsOut = COUNT(*) FROM [dbo].[' + @Table + '] ' 
SELECT @SQL = @SQL + N'WHERE tran_date < CONVERT(DATETIME,@BoundIn))' 

EXEC sp_executesql @SQL, N'@BoundIN SQL_VARIANT, @RowsOut INT OUTPUT', @BoundIn = @Bound, @RowsOut = @Rows OUTPUT 

変数に複数の値を割り当てることに問題があるかもしれません。私はそれを理解するためにそれと遊ぶ必要があるだろうが、うまくいけば、これは正しい方向にあなたを始める。

ちなみに、ISNULL()関数を使用すると、集計に渡される値のNULL値を排除できます。ヌル値と連結された文字列値は、別のヌル値になります。

関連する問題