2012-01-12 175 views
2

我試圖向表中插入一些數據包含兩個東西:「一個字符串」和「最大數量在Order列+ 1」。INSERT INTO使用子查詢和一些操作

這是我的查詢:

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

什麼與我的查詢回事?

我正在使用Microsoft SQL Server 2005 SP3。

+0

您正在使用什麼RDBMS? – 2012-01-12 22:12:05

+0

@ subt13 Microsoft SQL Server 2005 SP3 – 2012-01-12 22:12:57

+0

你得到了什麼錯誤? – 2012-01-12 22:14:42

回答

3

您可以測試該查詢是這樣的:

我沒有收到錯誤:

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服務中有效據我所知。

+0

@mahdi - 你能發佈更多與該錯誤相關的代碼嗎? – 2012-01-12 22:19:21

+0

你是什麼意思? – 2012-01-12 22:20:13

+0

那麼,在你的問題中,你發佈了一個名爲MyTable的表,並且該錯誤將會(可能)不會發生此錯誤的定義 – 2012-01-12 22:21:24

3

除非他有一個名爲排序依據

那麼他就必須是插入中添加/分配的所有值,特別是如果該列不允許空 聽起來完全限定與dbo.MyTable插入列。現場可能更有意義。 此外,你爲什麼用SQL關鍵字命名字段...?

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

嘗試測試插入第一..

+0

對不起,我的壞評論。我刪除了它。錯誤是「無法將NULL值插入列'Order',表'master.dbo.MyTable';列不允許爲空,INSERT失敗,語句已終止。 – 2012-01-12 22:24:33

+0

我想我得到這個錯誤,因爲Max()函數什麼也沒有返回,因爲我的表目前是空的(沒有行) – 2012-01-12 22:26:35

3

Cannot insert the value NULL into column 'Order', table 'master.dbo.MyTable'; column does not allow nulls. INSERT fails. The statement has been terminated.

這意味着Order列不允許爲空,你的列的Max([Order]) + 1一部分返回NULL。
這是因爲你的桌子是空的,就像你自己已經注意到的那樣。

您可以解決此通過查詢由實數代替NULL,使用ISNULL()

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

我討厭成爲一個說..但它就像他沒有意識到,他沒有在他的表中插入任何東西,我可以理解他是否插入到MyTest中,並且選擇表類似dbo.YourTest ..初始查詢甚至不會添加到他正在嘗試執行的操作中。 – MethodMan 2012-01-12 22:32:14

+0

謝謝。有用! – 2012-01-12 22:34:28