Как мне для каждого в SQL в качестве альтернативы использования курсора? - PullRequest
1 голос
/ 13 апреля 2010

Я пытаюсь написать сценарий SQL, который вставляет 2 строки в таблицу таким образом:

INSERT INTO [table1]
       ([Id]
       ,[Name]
       ,[SequenceNo]
       ,[EntityId])
 VALUES
       (<newid(), uniqueidentifier,>
       ,<'SpecificName1', nvarchar(255),>
       ,<1, int,>
       ,</*Here's where I need help*/>)
INSERT INTO [table1]
       ([Id]
       ,[Name]
       ,[SequenceNo]
       ,[EntityId])
 VALUES
       (<newid(), uniqueidentifier,>
       ,<'SpecificName2', nvarchar(255),>
       ,<2, int,>
       ,</*Here's where I need help*/>)

«EntityId» - это внешний ключ к таблице, которую я здесь называю «Entities».

Есть ли способ, которым я могу вставить 2 из этих строк для каждой строки, которую я имею в "Entities" (со значением столбца Id соответствующего Entity в качестве значения для столбца EntityId таблицы 1 без использования курсора ?

1 Ответ

1 голос
/ 13 апреля 2010

INSERT SELECT должен быть тем, что вам нужно. Я не уверен, что вам может понадобиться предложение WHERE, чтобы вставить только соответствующие сущности, хотя ...

РЕДАКТИРОВАТЬ: Мой первый ответ не увеличил последовательность нет для каждого элемента в сущности. Для этого использовали метод ROW_NUMBER.

INSERT INTO [table1]
(
    [Id],
    [Name],
    [SequenceNo],
    [EntityId]
)
SELECT
    NEWID(),
    'SpecificName1',
    ROW_NUMBER() OVER (ORDER BY EntityId),
    EntityId
FROM
    Entities
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...