Linq to Sql: общие хранимые процедуры - PullRequest
1 голос
/ 04 января 2011

Я использую Linq-to-Sql для приложения на C # и в настоящее время работаю над некоторыми хранимыми процедурами.Приложение предназначено для газеты, и пример хранимой процедуры выглядит следующим образом:

ALTER PROCEDURE dbo.Articles_GetArticlesByPublication
   @publicationDate date
AS
   SELECT 
      *
   FROM 
      Articles
   WHERE
      Articles.PublicationDate=@publicationDate

В любом случае, этот запрос получает все статьи, где дата публикации равна аргументу (publishingDate).Как я могу изменить это так, чтобы аргумент мог обрабатывать несколько дат публикации?

Кроме того, я бы предпочел не использовать «МЕЖДУ», скорее, я хочу выбирать даты.

Ответы [ 2 ]

2 голосов
/ 04 января 2011

Нет встроенной поддержки для передачи массивов / списков в TSQL SP.Однако вы можете использовать типы данных XML или varchar.Я бы предпочел XML, потому что вы можете легко создать переменную таблицы и выбрать в нее все значения из переданного XML, а затем использовать оператор IN в предложении WHERE (это просто концептуальный SQL):

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 голос
/ 04 января 2011

Если вы используете SQL Server 2008, вы можете использовать табличные параметры для передачи нескольких значений в хранимую процедуру со списками XML или запятыми, но она не поддерживается в LINQ to SQL, поэтому должны использовать ADO.NET напрямую с .NET 3.5 и выше.

См. этот ответ от marc_s о том, почему он недоступен в Linq to SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...