Табличные функции, смешивающие столбцы - PullRequest
1 голос
/ 08 декабря 2011

Я переключаю некоторую логику sql, обрабатываемую в приложении посредством множественных обращений к базе данных назад и вперед, в хранимые процедуры и функции sql, чтобы один вызов мог выполнить работу, которую ранее было много.

Большая часть этой логики требует объединения различных подмножеств данных, и в результате я встроил их в функции, чтобы обеспечить простое объединение.Однако все идет отлично, время от времени функции кажутся немного сумасшедшими и начинают смешивать мои столбцы.Я думаю, что это происходит в результате модификаций, которые я делаю в стеке по мере дальнейшей разработки приложения, однако я не уверен.

Ниже приведена спецификация столбца, касающаяся языковой блокировки.

Column spec

А ниже указана функция, которая страдает от перепутанных столбцов.Он выполняет вызов другой функции со значительно более сложной логикой, поэтому я не буду публиковать ее, а скорее получу результаты прямого вызова этих функций.

Function spec

И, наконец,результаты запроса как к проблемной функции, так и к внутренней функции, которая использует в качестве источника данных.Функция источника возвращает данные правильно, но выбор * из другой функции приводит к тому, что данные полностью перепутаны, что, очевидно, приводит к полному сбою логики в дальнейшем.

Function results

Есть идеи, что, черт возьми, происходит?Это, как я подозревал, результат других изменений?Если да, есть ли способ каскадирования?

Спасибо

Редактировать Дальнейшее изучение показало, что в проблемной функции отсутствуют два столбца слева, несмотря на выбор *

1 Ответ

9 голосов
/ 08 декабря 2011

Вероятно, вам нужно использовать sp_refreshsqlmodule для исправления метаданных.Скорее всего, вы отбросили и воссоздали базовую функцию, не выполнив то же самое для вызывающей.

Кроме этого, следует иметь в виду несколько других вещей:

  • Никогда не используйте SELECT *;всегда называйте столбцы
  • Попробуйте использовать WITH SCHEMABINDING , чтобы избежать незаметных изменений в базовой функции
...