我想将@id值作为自动增量插入到Items表中。
表名=项目 列=代码,名称。
列代码不允许空值并且是唯一的但它没有自动增量, 我试着写一个查询,它会在Code列中填充值(1,2,3,4,...)作为自动增量,但它不起作用
这是我的查询
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/llListview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".ChaptersActivity">
<ListView
android:focusableInTouchMode="false"
android:drawSelectorOnTop="true"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/listViewId"
android:fastScrollEnabled="true"/>
</LinearLayout>
这是错误
Msg 515,Level 16,State 2,Line 6 无法将值NULL插入“Code”列,表'Items';列不允许空值。 INSERT失败。 声明已经终止。
我希望将@id作为自动增量插入到Code列中。
请有人帮助我。
答案 0 :(得分:1)
我可以假设你的桌子是空的吗?
在这种情况下,
SET @id = (select MAX(Code) from Items)
是NULL,
所以
SET @id =@id+1
也是空的。
正确的代码是:
SET @id = (select ISNULL(MAX(Code),0) from Items)
,如果没有行,将返回数字0。
典型的初学者SQL错误 - 要注意&#34;有毒&#34; SQL中的NULL的性质,它将它触及的所有东西都变成了 - NULL。
答案 1 :(得分:0)
如果您使用@id,则可能会在两个语句之间发生变化
由于以下是一个陈述,您不需要将其包装在交易中
insert into Items (Code, Name)
select MAX(Code) + 1, 'm'
from items
我认为这涉及空白物品
insert into Items (Code, Name)
select isnull(MAX(Code), 0) + 1, 'm'
from items