Вставить порядковые номера в запрос вставки с помощью запроса Выбрать - PullRequest
0 голосов
/ 21 февраля 2012

Я хочу скопировать некоторые данные между двумя базами данных, поэтому я использую запрос вставки, как показано ниже:

INSERT INTO [NewDB].[MyTable]
(
[FirstName],
[LastName],
[Number]
)
(
SELECT [ST].[FirstName], [ST].[LastName], **SequentialNumber**
FROM [SourceDB].[SourceTable] AS [ST]
);
GO

Но новая таблица имеет новый уникальный столбец int, а не NULL, с именем Number, как вы видите, так как я могу вставить последовательные числа (на самом деле это 10-значное число) с помощью следующего сценария, что-то вроде 1234567891, 1234567892, ..., кто-нибудь есть идеи?

Ответы [ 3 ]

2 голосов
/ 21 февраля 2012

Вы можете использовать функцию ROW_NUMBER(), например ::100100

INSERT INTO [NewDB].[MyTable]
(
    [FirstName],
    [LastName],
    [Number]
)

SELECT [ST].[FirstName], [ST].[LastName], ROW_NUMBER() OVER(ORDER BY [ST].[FirstName])
FROM [SourceDB].[SourceTable] AS [ST]
0 голосов
/ 21 февраля 2012

вы можете сделать это:

INSERT INTO [MyTable]
(
[FirstName],
[LastName],
[Number]
)

SELECT [ST].[FirstName], [ST].[LastName], (select max(number)+1 from [MyTable])
FROM [SourceTable] AS [ST]

если у вас нет записей на MyTable, вам понадобится регистр для выбора, чтобы иметь значение NULL

0 голосов
/ 21 февраля 2012

Может быть, что-то вроде этого:

;WITH CTE AS
(
    SELECT 
        [ST].[FirstName], 
        [ST].[LastName], 
        ROW_NUMBER() OVER(ORDER BY [ST].[FirstName]) AS rowNbr
    FROM 
        [SourceDB].[SourceTable] AS [ST]
)
INSERT INTO [NewDB].[MyTable]
(
    [FirstName],
    [LastName],
    [Number]
)
SELECT
    CTE.[FirstName],
    CTE.[LastName]
    1234567890+(CTE.rowNbr-1)
FROM
    CTE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...