如何在SQL Server服务器查询中将变量(@id)作为自动增量插入表中?

时间:2016-04-11 15:47:36

标签: sql-server tsql sql-insert

我想将@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列中。

请有人帮助我。

2 个答案:

答案 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