2013-07-16 4 views
0

У меня есть таблица, в которой столбец первичного ключа имеет IDENTITY OFF. Выполняя INSERT, я выбираю max (Cust_Id) +1 и вставляет.Получите увеличенные идентификаторы, если идентификатор не установлен

Но иногда есть несколько записей, которые нужно вставить с помощью запроса, похожее на это:

INSERT INTO <table_1> 
SELECT 
    (SELECT MAX(Cust_Id)+1 FROM <table_1>), 
    CustName 
FROM <TABLE2> 
WHERE Dept = 'Sales' AND Designation = 'Manager' 

Оператор SELECT оператор часто выбирает несколько записей, но все записи имеют максимальный столбец ID сказать, 16.

Есть ли способ автоматического увеличения столбца max ID на основе строки?

Например:

ВМЕСТО:

16 ........... Джон

16 ........... Sam

16 ........... Адам

он должен выбрать таким образом:

16 ........... Джон

17 ........... Сэм

18 ........... Адам

+2

Есть ли причина, по которой вы не можете включить идентификацию? Вот почему он существует. – cadrell0

+0

Если вы отключились, потому что вам нужно, чтобы вставленные идентификаторы имели вид [ВЫХОД] (http://technet.microsoft.com/en-us/library/ms177564.aspx) – bummi

+0

Фактически эта таблица не разработана мной. Немногие ребята отключили его, не знаю почему. Теперь мои хранимые процедуры рушится, и мне нужно соответствующим образом изменить. – RKh

ответ

1

Это ляп, но это может помочь вам решить немедленная проблема. В конечном счете, однако, лучше снова включить IDENTITY.

DECLARE @Seed INT 
SELECT @Seed = MAX(Cust_ID) FROM <table_1> 


INSERT INTO <table_1> 
SELECT 
    ROW_NUMBER() OVER (ORDER BY Dept) + @Seed, 
    CustName 
FROM <TABLE2> 
WHERE Dept = 'Sales' AND Designation = 'Manager' 

Однако, этот код, вероятно, будет разбит впечатляющими способами, если вы выполните несколько экземпляров его одновременно.

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