2013-11-04 1 views
0

I이 프로 시저가 :쉼표로 구분 된 문자열을 저장 프로 시저에 전달 하시겠습니까?

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#으로 값을 전달할 때 아무 것도 반환하지 않는 이유는 무엇입니까?

+1

태그가 변경되면 도움이 되나요? – Srb1313711

+2

'[dbo]'는 mssql이라는 큰 힌트입니다. –

+1

C#에서 저장 프로 시저를 호출하는 코드가 표시되지 않습니다. – Romoku

답변

3

분할을 전혀하지 마십시오. 테이블 반환 매개 변수를 만들고이를 저장 프로 시저에 전달하십시오. 그런 다음 저장 프로 시저를 테이블 반환 매개 변수에 조인하도록 변경합니다.

귀하의 sproc이처럼 보이는 끝날 것입니다 :

CREATE PROCEDURE [dbo].[uspPages_HotelPrices_Lookup_Select] 
    @HotelCodes dbo.MyCodesTable READONLY 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT * 
    FROM tPages_HotelPrices_Lookup a 
    INNER JOIN @HotelCodes b ON (a.ID = b.ID) 
END 

는 SO와 인터넷에 테이블 값 매개 변수를 사용의 좋은 예를 많이 있습니다. 익숙해지는 좋은 방법.

+0

당신의 답변을 주셔서 감사합니다 지금은 작동하지만 대신이 방법을 사용하여 볼 것입니다, 무엇이 테이블 값 parametre입니까? – Srb1313711

+1

.net 및 sql 서버 모두에서 선언 할 수있는 테이블이며 원하는 방식으로 ID 목록을 전달할 수 있습니다.SQL 끝에서 직접 테이블에 조인 할 수 있습니다. 인터넷에서 살펴보고 몇 가지 예를 찾으십시오. 저는 현재이 프로젝트를 많이 사용하는 프로젝트를 진행하고 있으며 사용하기 쉽다는 것에 즐겁게 놀랐습니다. 일부주의 사항은 있지만 전체적으로 + ve 경험입니다. 즐겨 :-) – bhs

1

db 수준이 아닌 C#에서 분할을 시도 할 수 있습니다.

string[] m_separators = new string[] { "," }; 
string[] m_stringarray = somestring.Split(m_separators, StringSplitOptions.RemoveEmptyEntries); 

또는 저장된 프로 시저에 배열을 전달하는 것과 관련하여 SO의 예제를 따르십시오. 어쨌든 당신이하고 싶은 일일 것입니다.

+0

지금 응답 해 주셔서 감사합니다하지만 그것을 정렬있어 – Srb1313711

관련 문제