Вставьте последовательные номера - PullRequest
0 голосов
/ 26 мая 2010

У меня есть таблица A (Acons, A1, A2, A3), в которую я должен вставить информацию из другой таблицы B со столбцами (B1, B2, B3). Acons - это столбец, в котором должны содержаться несколько последовательных чисел (это не идентификация, и я не могу сделать это идентификацией). Я знаю xmin - начиная с номера, последовательность должна быть вычислена. Как вставить строки в таблицу A, используя один оператор Insert?

Я пытался сделать следующее, но это не сработало:

DECLARE @i AS INT;

SET @i = xmin;    

INSERT INTO A(Acons, A1, A2, A3)
SELECT @i = (Bcons = (@i + 1)), B1, B2, B3
FROM B

К сожалению, указанное выше решение не работает;

Ответы [ 3 ]

3 голосов
/ 26 мая 2010

У вас уже есть набор строк, из которых можно сгенерировать числа для добавления в Bcons. Это сложнее в SQL Server 2000, но можно надеяться, что вы используете SQL Server 2005 +

WITh cNumbers AS
(
    SELECT
        ROW_NUMBER() OVER (ORDER BY Bcons) AS Number,
        Bcons, B1, B2, B3
    FROM
        B
)
INSERT INTO A (Acons, A1, A2, A3)
SELECT
    Bcons + Number /* need -1 here? */, B1, B2, B3
FROM
    cNumbers

Как упоминал Филипп Келли, нам не нужен CTE. Doh.

SELECT
    Bcons + ROW_NUMBER() OVER (ORDER BY Bcons) /* need -1 here? */, B1, B2, B3
FROM
    B
0 голосов
/ 26 мая 2010

Это еще один способ сделать это:

DECLARE @i AS INT;
SET @i = xmin;
insert into a
select ((ROW_NUMBER() OVER (ORDER BY b1))+@i) AS Number,b1,b2,b3 from b

- Re-отредактированный

0 голосов
/ 26 мая 2010

Я не знаю, откуда приходит xmin, но попробуйте это.

DECLARE @i AS INT;
SET @i = xmin; 
Insert into A
Select @i+1,b1,b2,b3 from B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...