2016-12-06 6 views
1

Например, я имел столбец с именем «ID» Я хочу, чтобы получить результат, какКак автоматически генерировать идентификатор со случайными числами в SQL сервере

ID 
--- 
ABCXX708 
ABCXX976 
ABCXX654 
ABCXX081 

В коротком ABCXX должны быть общими для каждой строки, но остальные 3 цифры должны быть случайными и целым числом ..

+1

Вопрос не ясен. Добавьте некоторые примеры данных –

+0

Отредактированная проверка сейчас –

+0

Всегда ли это три числа в конце или это может быть любое количество цифр –

ответ

2
with t (n) as (select 0 union all select n+1 from t where n <100) 

select 'ABC' 
     + format(n,'00') 
     + cast(cast(rand(cast(newid() as varbinary(100)))*10 as int) as char(1)) 

from t 

Альтернативное решение

with t (n) as (select 0 union all select n+1 from t where n <100) 

select 'ABC' 
     + right ('0' + cast(n as varchar(2)),2) 
     + cast(cast(rand(cast(newid() as varbinary(100)))*10 as int) as char(1)) 

from t 
+0

это ошибка: «формат» не является признанным встроенным именем функции. « –

+0

iam с использованием SQL Server 2008 версии, похоже, нет функции, построенной с помощью встроенного формата –

+0

Проверить альтернативное решение –

0

С помощью функции RAND() вы можете получить случайные числа. И для «ABCXX» вы можете следовать своей предыдущей логике.

SELECT CAST(RAND()*10.00 AS INT) 

Вышеуказанная функция RAND() будет давать значения между 0.0 до 1.0 в десятичных значках каждый раз, когда вы нажимаете «Заявление». Чтобы сделать это для одной цифры Multiply с 10 и передать ее INT, чтобы удалить следующие десятичные значения.

Reference "MSDN

+0

Are вы знакомы с SQL Server RAND()? –

+0

Простите, что я делаю что-то неправильно? @DuduMarkovitz –

+0

Да, вы. Запустите это: 'с t (n) as (выберите 1 union all выберите n + 1 из t, где n <100) SELECT rand() из t' –

0

Поскольку SQL Server 2012 вы FORMAT функции и SEQUENCE объекта. Поэтому ниже запрос будет работать.

Прежде всего, необходимо создать объект последовательности.

CREATE SEQUENCE DemopSeq 
    START WITH 1 
    INCREMENT BY 1; 

Затем следующий запрос будет генерировать результаты согласно вашему требованию.

SELECT CONCAT('ABC',FORMAT(NEXT VALUE FOR DemopSeq, '00'),ABS(Checksum(NewID()) % 10)) 

Надеюсь, это поможет.

0

Вы можете написать как этот

select 'ABCXX'+CAST(FLOOR(RAND()*(1000-100)+100) as varchar(3)) 'id' 
+0

Это идеальный ответ для моего вопроса: - с помощью t (n) as (выберите 0 union all выберите n + 1 из t, где n <100) выберите 'ABC' + right ('0' + (1) + литье (литье (отливка (в виде varbinary (100))) * 10 as int) как char (1)) от t –

Смежные вопросы