2011-01-04 19 views
1

私はLinq-to-SqlをC#アプリケーションに使用していますが、現在いくつかのストアドプロシージャで作業しています。アプリケーションは、新聞のためであり、サンプルストアドプロシージャは以下の通りです:Linq to Sql:一般的なストアドプロシージャ

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

とにかく、このクエリは、発行日が引数(publicationDate)に等しいの記事をすべて取得します。議論が複数の出版日を処理できるように、これをどうやって変更できますか?

また、「BETWEEN」を使用しないことをお勧めします。むしろ、日付を選択して選択したいと考えています。

+0

は、fromとthroughの基準が働く(連続する日付)か、関連のない日付のリストが必要ですか?また、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ではサポートされていないため、.NET 3.5以上でADO.NETを直接使用する必要があります。

Linq to SQLで使用できない理由はmarc_sのthis answerを参照してください。