私はこのストアドプロシージャを持っています:
ALTER PROCEDURE [dbo].[uspPages_HotelPrices_Lookup_Select]
@HotelCode nvarchar(100)
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM tPages_HotelPrices_Lookup
WHERE HotelCode IN (SELECT * FROM DBO.ufSplit(@HotelCode, ','))
END
DBO.ufsplit
コンマで区切られた文字列を分割し、各行がコンマで区切られた各値を含むテーブルを返します。
以下のコードを使用して、このストアド プロシージャに文字列を渡します。
static void Main(string[] args)
{
HotelCodesTableAdapter hcTa = new HotelCodesTableAdapter();
DestinationMarketingEntity.HotelCodesDataTable hotelCodesDt = hcTa.GetData();
string hotelCodesString = "";
//Comma separating hotel codes and putting each word in '' to be passed to sql sproc as a list
for (int i = 0; i < hotelCodesDt.Count; i++)
{
hotelCodesString += hotelCodesDt.Rows[i].ItemArray.GetValue(0).ToString() + ",";
}
hotelCodesString = hotelCodesString.TrimEnd(',');
HiltonEEHotelPricesTableAdapter hEETa = new HiltonEEHotelPricesTableAdapter();
WorldWideFeedEntity.HiltonEEHotelPricesDataTable hEEDt= hEETa.GetData(hotelCodesString);
}
最後の行は、ストアド プロシージャが呼び出されている場所です。
基本的hotelCodesString
には に似て"1,2,3"
いますが、これはこのストアド プロシージャから何も返しません。しかし、以下を実行すると:
select *
from tPages_HotelPrices_Lookup
where HotelCode IN
(
SELECT *
FROM DBO.ufSplit('1,2,3',',')
);
それは私が望むすべてを取り戻します。ここで何か不足していますか?c#で値から渡すときに何も返さないのはなぜですか?