INSERT INTO с подзапросом и некоторыми операциями - PullRequest
2 голосов
/ 13 января 2012

Я пытаюсь вставить некоторые данные в таблицу, содержащую две вещи: «строка» и «максимальное число в Order столбец + 1».

Это мой запрос:

INSERT INTO MyTable ([Text],[Order]) 
SELECT 'MyText' , (Max([Order]) + 1) 
FROM MyTable

Что не так с моим запросом?

Я использую Microsoft SQL Server 2005 с пакетом обновления 3 (SP3).

Ответы [ 3 ]

3 голосов
/ 13 января 2012

Если у него нет столбца с именем OrderBy

, то ему придется добавить / назначить все значения в этой вставке, особенно если столбец не допускает пустых звуков, как при полной вставке с помощью dbo.MyTable.Поле может иметь больше смысла.Кроме того, почему вы называете поля ключевыми словами SQL ... ???

INSERT INTO MyTable ([Text],[Order] Values('MyTextTest',1)

Сначала попробуйте выполнить тестовую вставку ..

3 голосов
/ 13 января 2012

Невозможно вставить значение NULL в столбец «Порядок», таблица «master.dbo.MyTable»;столбец не допускает пустых значений.Вставить не удается.Оператор был прерван.

Это означает, что столбец Order не может быть пустым, и , что часть Max([Order]) + 1 вашего столбца возвращает NULL.
Это потому, что ваша таблица пуста, как вы уже заметили.

Вы можете обойти эту проблему, заменив NULL действительным числом в запросе, используя ISNULL():

INSERT INTO MyTable ([Text],[Order]) 
SELECT 'MyText' , (isnull(Max([Order]),0) + 1) 
FROM MyTable
3 голосов
/ 13 января 2012

Вы можете проверить этот запрос следующим образом:

Я не получаю сообщение об ошибке:

create table #MyTable
(
    [Text] varchar(40),
    [Order] int NOT NULL
)
INSERT INTO #MyTable([Text],[Order]) 
SELECT 'MyText' [Text], isnull(max([order]) + 1, 0) [Order] 
FROM #MyTable

drop table #MyTable

Оригинал:

INSERT INTO MyTable ([Text],[Order]) 
SELECT 'MyText' [Text], max([Order]) + 1 [Order] 
FROM MyTable

или

INSERT INTO MyTable ([Text],[Order]) 
SELECT top 1 'MyText' [Text], max([Order]) + 1 [Order] 
FROM MyTable
Насколько мне известно,

предел недействителен в SQL Server.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...