Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Генерация уникального значения


Автор: Alex_D 16.2.2007, 15:04
В базе данных есть таблица в которой ключевое поле имеет тип int. 
Значение первичного ключа должно задаваться двумя способами:
1. Оно может задаваться явно (с этим проблем нет)
2. Генерируется автоматически, при этом в виде пераметров должен передаваться диапазон возможных значений. 
Можно ли организовать это средствами SQL Server? 

Автор: Dremlin 16.2.2007, 15:13
Написать хранимую процедуру для генерации ключа по параметрам и вызывать ее перед вставкой.

Автор: Alex_D 16.2.2007, 15:28
Можно пример. Буду очень благодарен.

Автор: SergeBS 16.2.2007, 15:35
Alex_D,
Читай BOL: Identity

Dremlin, 
см. выше.

Автор: Alex_D 16.2.2007, 16:08
Но ведь и свойство и функция  Identity устанавливается при создании таблицы.  
Каким образом его использовать при добавлении новой записи?

Автор: SergeBS 16.2.2007, 17:10
Alex_D, 
Цитата

Но ведь и свойство и функция  Identity устанавливается при создании таблицы.  

Нет.
Цитата

IDENTITY (Property) (T-SQL)
Creates an identity column in a table. This property is used with the CREATE TABLE and ALTER TABLE Transact-SQL statements.

Ничто не мешает сделать свойство identity у столбца и не париться?
Выставив флажок 
SET IDENTITY_INSERT [database.[owner.]]{table} {ON | OFF}
разрешаешь/запрещаешь ручную вставку.
До понедельника smile

Автор: Alex_D 17.2.2007, 21:00
Да, но как сделать так, чтобы сгенерированные значения попадали в заданный интервал. 
Если быть точнее, то необходимо чтобы сгенерированные значения не попадали в интервал, отведенный для ручного ввода.

Автор: kobra 17.2.2007, 23:58
IDENTITY [ (seed , increment) ]
можно напроимер договорится что положительние числа для ручного ввода, отрицательние IDENTITY. тогда IDENTITY (-1, -1)
можно напроимер договорится что четные числа для ручного ввода, нечетные IDENTITY. тогда IDENTITY (1, 2)




Автор: Alex_D 18.2.2007, 10:31
Да, так подходит. У меня первые 10 тысяч зарезервированы для ручного ввода, а остальное для автоматического. Огромное спасибо

Автор: SergeBS 19.2.2007, 15:22
Alex_D, 
Тему закрой - галочку поставь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)