我正在尝试向表中插入一些数据包含两件事:“一个字符串”和“Order
列中的最大数字+ 1”。
这是我的疑问:
INSERT INTO MyTable ([Text],[Order])
SELECT 'MyText' , (Max([Order]) + 1)
FROM MyTable
我的查询出了什么问题?
我正在使用Microsoft SQL Server 2005 SP3。
答案 0 :(得分: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 Server中无效。
答案 1 :(得分:3)
除非他有一个名为OrderBy的列
然后他必须添加/分配该Insert中的所有值,尤其是当列不允许空值时 听起来像使用dbo完全限定插入.MyTable.Field可能更有意义。 你也为什么用SQL关键字命名字段...... ???
INSERT INTO MyTable ([Text],[Order] Values('MyTextTest',1)
首先尝试测试插入..
答案 2 :(得分:3)
无法将值NULL插入“Order”列,表'master.dbo.MyTable';列不允许空值。 INSERT失败。声明已经终止。
这意味着Order
列不允许为空,和,列的Max([Order]) + 1
部分返回NULL。
这是因为你的桌子是空的,正如你自己已经注意到的那样。
您可以使用ISNULL()
通过查询中的实数替换NULL来解决此问题:
INSERT INTO MyTable ([Text],[Order])
SELECT 'MyText' , (isnull(Max([Order]),0) + 1)
FROM MyTable