Действительно ли возможно создать Уникальный идентификатор в Представлении SQL Server, которое останется тот же каждый раз, когда представление называют?

Я всегда делал:

perl -wlne'eval;print$@if$@'

С 5,10, я переключился на:

perl -wnE'say eval()//$@'
7
задан Brendo 3 December 2009 в 20:05
поделиться

4 ответа

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

1
ответ дан 7 December 2019 в 07:46
поделиться

Я думаю, вы можете сделать это с помощью ROW_NUMBER (), по крайней мере, если вы можете гарантировать упорядочение представления. Например:

 SELECT
     ROW_NUMBER() OVER (ORDER BY col1, col2, col3) as UniqueId
 FROM <lotsa joins>

Пока порядок остается неизменным, а в конце добавляются только поля, идентификатор будет уникальным.

1
ответ дан 7 December 2019 в 07:46
поделиться

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

Поскольку у вас 10 таблиц, и я собираюсь предположить что разработчик (-ы) БД только что присвоил ID INT IDENTITY всем таблицам, в итоге у вас будет примерно (2 ^ 31) ^ 10 возможных строк в таблице.

Единственный тип данных, который я могу придумать. может покрыть это число, это преобразовать все целые числа в строки с нулевым заполнением и собрать их все вместе как большой СИМВОЛ.

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

0
ответ дан 7 December 2019 в 07:46
поделиться

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

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

0
ответ дан 7 December 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: