Хранимая процедура, которая возвращает результат по динамическому SQL, не выдает имена столбцов - PullRequest
0 голосов
/ 02 марта 2012

У меня есть SP, который потенциально может собрать миллионы строк, этот SP сгенерировал этот набор результатов с помощью Dynamic SQL. Однако SP вызывается из LINQ, и LINQ не распознает столбцы, которые должны быть возвращены этим SP.

Если я создаю временную таблицу, LINQ распознает, но тогда я не уверен, должен ли SP сначала заполнить эту таблицу TEMP перед возвратом управления или она ничем не отличается от использования временной таблицы в SP.

То есть, будет ли использование временной таблицы, чтобы LINQ мог распознавать столбцы, ухудшать производительность или вести себя иначе, чем если бы я не использовал временную таблицу?

Тем не менее, если я не использую временную таблицу, LINQ не может получить столбцы, поэтому это затруднительное положение.

Спасибо за любой совет!

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

Вместо создания хранимого процесса для возврата наборов результатов попробуйте вместо этого использовать табличную функцию.

Внутри табличной функции вы объявляете структуру таблицы, которая должна быть возвращена, так что LINQ должен бытьвозможность использовать это.

Для получения дополнительной информации о табличных функциях посетите страницу: http://msdn.microsoft.com/en-us/library/ms191165.aspx

Использование их с помощью LINQ: http://msdn.microsoft.com/en-us/library/bb386954.aspx

Надеюсь, это поможет!

0 голосов
/ 02 марта 2012

попробуйте

SET FMTONLY ON
EXEC dbo.yourProc
SET FMTONLY OFF

Именно так Linq-to-Sql будет вызывать ваш процесс для определения имен столбцов. Кроме того, если у вас есть какие-либо параметры, Linq-to-Sql будет отправлять нули.

Если эта ошибка или не даст результатов, Linq-to-Sql не сможет использовать результаты из proc. Вы должны быть в состоянии настроить его отсюда, чтобы заставить его работать.

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