Второй счетчик в таблице SQL Server - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужна такая таблица:

CLIENT_ID ID CONTENT
--------------------
1         1  abc
1         2  abc
1         3  abc
2         1  abc
2         2  abc
2         3  abc

client_id и id - это pk таблицы.на стороне приложения известны только клиенты client_id и content, поэтому я подумал, что у меня есть триггер после вставки, который обновляет столбец id по мере необходимости, но у меня проблемы.любая помощь?Спасибо.

Моя первая попытка была:

CREATE TRIGGER test
ON [dbo].[table]
AFTER INSERT
AS 
BEGIN
    DECLARE @client_id INT;
    DECLARE @id INT;

    SELECT @client_id = client_id 
    FROM inserted;

    SELECT @id = ISNULL(MAX(clifor_id), 0) + 1 
    FROM table
    WHERE client_id = @client_id

    UPDATE [dbo].[table]
    SET [id] = @id
    WHERE ?????
END

, но я не знаю, как это сделать.

ps: извините за мой английский!

1 Ответ

0 голосов
/ 27 ноября 2018

@ Белка указала вам в правильном направлении - вместо триггер - это путь.St, как этот:

CREATE TRIGGER test
ON [dbo].[table]
INSTEAD OF INSERT
AS 
BEGIN
    UPDATE inserted
    SET id = (select 1+max(id) from dbo.table where client_id = inserted.client_id)

    INSERT INTO dbo.table
    SELECT * FROM inserted --note - you should rewrite this block so it will be with explicit list of columns
END

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

...