Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL 2005. Как сделать униклаьный ID для нескольких таблиц с типом Int?  [new]
Pvase
Member

Откуда:
Сообщений: 982
Есть задача сделать униклаьный код в таблицах, но он должен быть не GUID, так как данных будет:
5 000 таблиц, в каждой в среднем 100 000 записей. В каждой таблице по 2 поля: int и VarChar(50). Если сделать вместо вместо типа Int - GUID - то может сильно возрости размер базы. Есть какой то вариант присвоения ID уникального в пределах базы?
11 июн 09, 18:24    [7292026]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005. Как сделать униклаьный ID для нескольких таблиц с типом Int?  [new]
Gerros
Member

Откуда: Харьков
Сообщений: 501
Pvase,
сделать отдельную таблицу с идентити. Вставляешь в неё, получаешь последний вставленный тобой номер, вставляешь запись с этим номером в нужную таблицу.
11 июн 09, 18:34    [7292067]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005. Как сделать униклаьный ID для нескольких таблиц с типом Int?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Gerros
Pvase,
сделать отдельную таблицу с идентити. Вставляешь в неё, получаешь последний вставленный тобой номер, вставляешь запись с этим номером в нужную таблицу.


+1
11 июн 09, 18:38    [7292083]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005. Как сделать униклаьный ID для нескольких таблиц с типом Int?  [new]
aleks2
Guest
Pvase,

это можно было всегда

IDENTITY ( int  , 1 , 100  ) -- id_FirstTAble
IDENTITY ( int  , 2 , 100  ) -- id_SecondTAble
...
IDENTITY ( int  , n , 100  ) -- id_NthTAble

IDENTITY ([ , seed , increment ] )

seed

Is the value to be assigned to the first row in the table. Each subsequent row is assigned the next identity value, which is equal to the last IDENTITY value plus the increment value. If neither seed nor increment is specified, both default to 1.

increment

Is the increment to add to the seed value for successive rows in the table.

11 июн 09, 18:43    [7292108]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005. Как сделать униклаьный ID для нескольких таблиц с типом Int?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
aleks2
Pvase,

это можно было всегда

IDENTITY ( int  , 1 , 100  ) -- id_FirstTAble
IDENTITY ( int  , 2 , 100  ) -- id_SecondTAble
...
IDENTITY ( int  , n , 100  ) -- id_NthTAble

IDENTITY ([ , seed , increment ] )

seed

Is the value to be assigned to the first row in the table. Each subsequent row is assigned the next identity value, which is equal to the last IDENTITY value plus the increment value. If neither seed nor increment is specified, both default to 1.

increment

Is the increment to add to the seed value for successive rows in the table.

Но функцию IDENTITY можно применять только в
SELECT IDENTITY ( int  , 1 , 100  ), ... INTO <NewTableName> FROM ...
Разве не так?
11 июн 09, 19:48    [7292278]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005. Как сделать униклаьный ID для нескольких таблиц с типом Int?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
CREATE TABLE T0001 (ID Int IDENTITY(     500000,1) PRIMARY KEY, Data VarChar(50))
CREATE TABLE T0002 (ID Int IDENTITY(-    500000,1) PRIMARY KEY, Data VarChar(50))
CREATE TABLE T0003 (ID Int IDENTITY(    1000000,1) PRIMARY KEY, Data VarChar(50))
CREATE TABLE T0004 (ID Int IDENTITY(-   1000000,1) PRIMARY KEY, Data VarChar(50))
CREATE TABLE T0005 (ID Int IDENTITY(    1500000,1) PRIMARY KEY, Data VarChar(50))
CREATE TABLE T0006 (ID Int IDENTITY(-   1500000,1) PRIMARY KEY, Data VarChar(50))
...
CREATE TABLE T4999 (ID Int IDENTITY( 1250000000,1) PRIMARY KEY, Data VarChar(50))
CREATE TABLE T5000 (ID Int IDENTITY(-1250000000,1) PRIMARY KEY, Data VarChar(50))


SELECT size * 8 FROM sys.database_files WHERE type = 1
DECLARE	 @Counter	SmallInt
	,@Create	VarChar(4000)
SELECT	@Counter	= 1
WHILE (@Counter <= 5000/2) BEGIN
	SELECT	 @Create	= '
CREATE TABLE T' + Right('0000' + Convert(VarChar,2 * @Counter - 1),4) + ' (ID Int IDENTITY( ' + Right('    ' + Convert(VarChar,@Counter * 5),5) + '00000,1) PRIMARY KEY, Data VarChar(50))
CREATE TABLE T' + Right('0000' + Convert(VarChar,2 * @Counter - 0),4) + ' (ID Int IDENTITY(-' + Right('    ' + Convert(VarChar,@Counter * 5),5) + '00000,1) PRIMARY KEY, Data VarChar(50))
'		,@Counter	= @Counter + 1
	PRINT	@Create
	EXEC (@Create)
END
SELECT size * 8 FROM sys.database_files WHERE type = 1
768 кило на метаданные. Маловато.
11 июн 09, 21:33    [7292457]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить