Как я могу определить вычисляемый столбец в хранимой процедуре - PullRequest
0 голосов
/ 26 марта 2011

У меня есть вопрос об использовании вычисляемых столбцов в хранимых процедурах.

У меня уже есть некоторые поля в моей таблице как вычисляемые столбцы.

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

Я уже создал свою процедуру с некоторым курсором, но когда я пытаюсь выполнить ее, я получаю сообщение об ошибке с типом данных для вычисляемого столбца (как вы знаете, естьнет типа данных для вычисляемого столбца), так как я могу это обработать.

Ответы [ 2 ]

4 голосов
/ 26 марта 2011

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

ColA int
ColB int 

и вычисляемый столбец на основе ColA + ColB, вычисляемый столбец также будет int.Таким образом, вам необходимо (1) выяснить тип данных результата вычисленной вами форумной колонки, (2) изменить код, чтобы правильно учесть этот тип данных, и (3), как говорит Митч Уит, переписать его, чтобы не использоватькурсор.

1 голос
/ 27 марта 2011

Вы можете использовать SQL_VARIANT_PROPERTY(), чтобы определить базовый тип данных вычисляемого столбца:

SELECT TOP 1 SQL_VARIANT_PROPERTY(ComputedColumnName, 'BaseType') FROM TableName

Или, если хотите:

SELECT DISTINCT SQL_VARIANT_PROPERTY(ComputedColumnName, 'BaseType') FROM TableName

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


ОБНОВЛЕНИЕ

Как правильно указал Мартин, описанный выше метод не будет работатьесли таблица пуста.

Вы можете добавить произвольную строку и применить метод или использовать альтернативный способ, предложенный Мартином, который работает независимо от наличия данных:

select t.name,t.precision,t.scale,t.max_length, t.is_nullable
from sys.computed_columns c
   join sys.types t on t.user_type_id = c.user_type_id
where c.name='col_name' and c.object_id=object_id('schema_name.table_name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...