2011-01-04 5 views
1

Linq-to-SQL을 C# 응용 프로그램에 사용하고 현재 일부 저장 프로 시저에서 작업하고 있습니다. 응용 프로그램은 신문, 그리고 샘플 저장 프로 시저는 다음과 같습니다 : 게시 날짜가 인수 (publicationDate) 동일입니다Linq to Sql : 일반 저장 프로 시저

ALTER PROCEDURE dbo.Articles_GetArticlesByPublication 
    @publicationDate date 
AS 
    SELECT 
     * 
    FROM 
     Articles 
    WHERE 
     [email protected] 

어쨌든,이 쿼리는 모든 기사를 가져옵니다. 인수가 여러 발행 날짜를 처리 할 수 ​​있도록 어떻게 변경합니까?

또한 "BETWEEN"을 사용하지 않는 것이 좋습니다. 오히려 날짜를 선택하고 선택하려고합니다.

+0

은 출발 기준과 종료 기준이 작동하며 (연속 날짜) 관련없는 날짜 목록이 필요합니까? 또한 datetime PublicationDate 필드에 저장된 시간 또는 2011-01-03 00:00과 같은 날짜 만 있습니까? – Tahbaza

+0

그들은 날짜 일 뿐이므로 "@publicationDate date"로 변경할 수 있습니다. 방금 ​​첫 번째 질문에 답변하기 위해 내 게시물을 편집했습니다. 이상적으로는 관계가없는 날짜로 보내고 싶습니다. – Eric

+0

어떤 SQL 버전을 사용하고 있습니까? –

답변

2

배열/목록을 TSQL SP에 전달할 기본 지원은 없습니다. 그러나 XML 또는 varchar 데이터 유형을 사용할 수 있습니다.

CREATE STORED PROCEDURE foo AS 
    @dates XML 
BEGIN 
... 
DECLARE @datesTable TABLE ([d] date) 

INSERT INTO @datesTable 
SELECT d FROM OPENXML (@dates, '/ROOT/date',1) WITH (d date) 

... 
SELECT... WHERE date IN (SELECT d FROM @datesTable) 
1

당신이 경우 : 당신이 쉽게 테이블 변수를 만들고에 전달 된 XML의 모든 값을 선택하고 WHERE 절에 문에서 사용할 수 있기 때문에 (이 그냥 개념 SQL입니다) XML을 선호하는 것 SQL Server 2008을 사용하면 table valued parameters을 사용하여 XML 또는 쉼표로 구분 된 목록이있는 저장 프로 시저에 여러 값을 전달할 수 있지만 LINQ to SQL에서는 지원되지 않으므로 ADO.NET을 .NET 3.5 이상에서 직접 사용해야합니다.

Linq to SQL에서 사용할 수없는 이유에 대해서는 marc_s의 this answer을 참조하십시오.