sql - сохранить вычисленный результат в вычисляемом поле - PullRequest
0 голосов
/ 22 июня 2011

определенные поля в нашей базе данных содержат вычисляемые функции, например,

select lastname + ', ' + firstname as fullname from contact where contact.id =$contact$

при просмотре поля отображаются правильные данные (я предполагаю, что это потому, что когда вы открываете запись, вычисление выполняется).однако данные не «сохраняются» в поле и, следовательно, являются нулевыми, пока запись не будет открыта.Можно ли сохранить результат в поле, что делает возможным поиск данных?

большое спасибо

james

EDIT

я не могу создать computed_columns с помощью нашего программного обеспечения.

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

Select * from contact where contact.id =$contact$ for xml auto

я получу только lastname, firstname - поэтому я знаю, что поле полного имени не сохраняет свою информацию.

Ответы [ 4 ]

0 голосов
/ 22 июня 2011

Вам нужно использовать опцию PERSISTED для столбца, когда вы используете CREATE TABLE, например,

CREATE TABLE test (col_a INT, col_b INT, col_c AS col_A * col_B PERSISTED)
0 голосов
/ 22 июня 2011

Используйте ключевое слово PERSISTED при создании столбца

От BOL:

сохранялось Указывает, что компонент SQL Server Database Engine будет физически хранить вычисленные значения в таблице и обновлять значения при обновлении любых других столбцов, от которых зависит вычисляемый столбец. Пометка вычисляемого столбца как PERSISTED позволяет создать индекс для вычисляемого столбца, который является детерминированным, но не точным. Для получения дополнительной информации см. Создание индексов для вычисляемых столбцов. Любые вычисляемые столбцы, которые используются как столбцы разбиения разделенной таблицы, должны быть явно помечены как PERSISTED. Когда указано PERSISTED, computed_column_expression должно быть детерминированным.

0 голосов
/ 22 июня 2011

Это не так, как работают вычисляемые столбцы в SQL Server, поэтому я подозреваю, что это то, что делает ваше клиентское приложение Как вы смотрите на данные, когда значение рассчитывается правильно? Работает ли это при просмотре данных в SSMS?

Взгляните на http://msdn.microsoft.com/en-us/library/ms191250(v=SQL.90).aspx, чтобы увидеть, как правильно создавать вычисляемые столбцы.

например.

create table TestTable
    (a int,
    b int,
    c as a + b)

insert into TestTable (a,b)
values (1,2)

select * from TestTable
where c = 3

Этот запрос основан на вычисляемом столбце и возвращает вставленную строку.

0 голосов
/ 22 июня 2011

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

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