2009-11-02 4 views
1

В SQL Server у меня есть два поля: один является первичным и имеет идентификатор (AN_ID), тогда у меня есть другой, который по устаревшим причинам (не спрашивайте) должен быть обновлен, отражая AN_ID. В настоящее время они имеют точно такое же значение. Мне было интересно, есть ли чистый запрос T-SQL (без хранимых процедур), чтобы он автоматически увеличивался.Что такое элегантный способ сделать два поля автоматическим приращением?

Большого спасибо

Edit: я вынужден SQL Server 2000

ответ

3

«Правильное» решение почти наверняка использует триггер, однако, если оно подпадает под заголовком «никаких хранимых процедур», вы можете немного похудеть, запустив два консулирующих запроса (которые вы можете отправить как один запрос из вашего вызывающего приложения - полезно знать, какую среду вы используете поверх SQL Server).

например. (очень грубо)

INSERT INTO tbl (col1, col2, col3) values (@col1param, @col2param, @col3param); 
UPDATE tbl SET not_an_id = an_id WHERE an_id = SCOPE_IDENTITY() 
+0

Я использую php поверх этого – 0plus1

+1

@@ SCOPE_IDENTITY не существует , используйте SCOPE_IDENTITY() вместо – MaxiWheat

4

Если оба поля могут содержать одинаковое значение, то вы можете использовать триггер вставки или вычисляемый столбец (новый в SQL 2005).

EDIT: Что-то вроде этого должно работать.

CREATE TRIGGER MyTable_AI ON MyTable 
AFTER INSERT AS 
    UPDATE MyTable 
    SET OTHER_ID = AN_ID 
    WHERE AN_ID IN (SELECT AN_ID FROM inserted); 
+0

Я бы пошел с вычисленным столбцом - только имеет значение при выполнении SELECT. – 2009-11-02 13:09:23

+0

Я полностью забыл, но я застрял в mssql 2000 :( – 0plus1

+1

Затем используйте триггер AFTER INSERT, чтобы установить второе поле в значение идентификатора в AN_ID. –

2

Второй столбец может быть вычисленным столбцом с формулой AN_ID.

Вы также можете создать представление с псевдонимом AN_ID.

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