我試圖向表中插入一些數據包含兩個東西:「一個字符串」和「最大數量在Order
列+ 1」。INSERT INTO使用子查詢和一些操作
這是我的查詢:
INSERT INTO MyTable ([Text],[Order])
SELECT 'MyText' , (Max([Order]) + 1)
FROM MyTable
什麼與我的查詢回事?
我正在使用Microsoft SQL Server 2005 SP3。
我試圖向表中插入一些數據包含兩個東西:「一個字符串」和「最大數量在Order
列+ 1」。INSERT INTO使用子查詢和一些操作
這是我的查詢:
INSERT INTO MyTable ([Text],[Order])
SELECT 'MyText' , (Max([Order]) + 1)
FROM MyTable
什麼與我的查詢回事?
我正在使用Microsoft SQL Server 2005 SP3。
您可以測試該查詢是這樣的:
我沒有收到錯誤:
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服務中有效據我所知。
@mahdi - 你能發佈更多與該錯誤相關的代碼嗎? – 2012-01-12 22:19:21
你是什麼意思? – 2012-01-12 22:20:13
那麼,在你的問題中,你發佈了一個名爲MyTable的表,並且該錯誤將會(可能)不會發生此錯誤的定義 – 2012-01-12 22:21:24
除非他有一個名爲排序依據
那麼他就必須是插入中添加/分配的所有值,特別是如果該列不允許空 聽起來完全限定與dbo.MyTable插入列。現場可能更有意義。 此外,你爲什麼用SQL關鍵字命名字段...?
INSERT INTO MyTable ([Text],[Order) Values('MyTextTest',1)
嘗試測試插入第一..
對不起,我的壞評論。我刪除了它。錯誤是「無法將NULL值插入列'Order',表'master.dbo.MyTable';列不允許爲空,INSERT失敗,語句已終止。 – 2012-01-12 22:24:33
我想我得到這個錯誤,因爲Max()函數什麼也沒有返回,因爲我的表目前是空的(沒有行) – 2012-01-12 22:26:35
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
我討厭成爲一個說..但它就像他沒有意識到,他沒有在他的表中插入任何東西,我可以理解他是否插入到MyTest中,並且選擇表類似dbo.YourTest ..初始查詢甚至不會添加到他正在嘗試執行的操作中。 – MethodMan 2012-01-12 22:32:14
謝謝。有用! – 2012-01-12 22:34:28
您正在使用什麼RDBMS? – 2012-01-12 22:12:05
@ subt13 Microsoft SQL Server 2005 SP3 – 2012-01-12 22:12:57
你得到了什麼錯誤? – 2012-01-12 22:14:42