代码之家  ›  专栏  ›  技术社区  ›  dcolumbus

SQL Server:试图插入空值的存储过程?

  •  0
  • dcolumbus  · 技术社区  · 14 年前
    < Buff行情>
    msg 515,level 16,state 2,procedure createparty,line 16
    无法将值NULL插入表“devin.dbo.party”的列“id”中;
    < /代码> 
    
    

    列不允许空值。插入 失败。 语句已终止。

    (1行受影响)
    < /代码> 
    < /块引用>
    
    

    怎么回事?我的桌子由

    id(主键)
    第一名字
    姓氏
    < /代码> 
    
    

    这是我的存储过程:

    使用[devin]
    去
    /******对象:storedprocedure[dbo]。[createparty]脚本日期:11/19/2010 16:59:43******/
    将Ansi_Nulls设置为打开
    去
    打开带引号的标识符
    去
    --================================
    作者:
    -创建日期:
    -描述:
    --================================
    更改过程[dbo]。[createparty]
    @名字varchar(50)
    @姓varchar(50)
    --@电子邮件地址varchar(100)
    --@邮政编码字符(5)
    AS
    开始
    
    设置NoCon;
    
    插入到参与方(名字、姓氏)
    值(@firstname,@firstname)
    
    结束
    < /代码> 
    
    

    有人能知道我为什么会犯这个错误吗?太烦人了…


    另外,出于某种原因,SQL管理只在intellisense中显示“id”列。我不知道为什么…。

    屏幕截图:

    它还没有“pk_party”的身份吗?它会自动执行此操作。我一定是错过了什么……

    列不允许空值。插入 失败。 语句已终止。

    (1 row(s) affected)
    

    我勒个去?我的桌子由

    Id (Primary Key)
    FirstName
    LastName
    

    这是我的存储过程:

    USE [DEVIN]
    GO
    /****** Object:  StoredProcedure [dbo].[CreateParty]    Script Date: 11/19/2010 16:59:43 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:      
    -- Create date: 
    -- Description: 
    -- =============================================
    ALTER PROCEDURE [dbo].[CreateParty]
        @firstname varchar(50),
        @lastname varchar(50)
        --@emailaddress varchar(100),
        --@zipcode char(5)
    AS
    BEGIN
    
        SET NOCOUNT ON;
    
        INSERT INTO Party (FirstName, LastName)
        Values (@firstname,@lastname)
    
    END
    

    有人能知道我为什么会犯这个错误吗?真烦人…


    另外,出于某种原因,SQL管理只在intellisense中显示“id”列。我不知道为什么…

    截图: alt text

    它还没有“pk_party”的身份吗?它会自动执行此操作。我一定错过了什么…

    5 回复  |  直到 9 年前
        1
  •  4
  •   Joe    14 年前

    ID是标识还是主键?pk本身不会在插入时为列填充任何数据。

        2
  •  8
  •   Remus Rusanu    14 年前
    INSERT INTO Party (FirstName, LastName)
        Values (@firstname,@lastname)
    

    不指定列的值 Id 因此,插入将尝试插入 违约 价值观:

    • 对于一个 IDENTITY() 列,默认值将是下一个标识
    • 对于带有 DEFAULT 约束,默认值将是约束的值
    • 其他的一切都会 NULL

    张贴 精确的 表的定义,以便我们可以告诉您列的默认值是什么。

        3
  •  0
  •   HLGEM    14 年前

    删除并重新创建具有指定标识的表。如果你已经有了数据,那就比这复杂多了。

    创建具有标识的表的scritp示例:

    USE [MyDatabase]
    GO
    
    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type in (N'U'))
    DROP TABLE MyTable
    GO
    
    
    CREATE TABLE MyTable(
        [ID] [int] IDENTITY (1,1) NOT NULL,
        [LASTNAME] [varchar](500) NULL,
        [FIRSTNAME] [varchar](500) NULL
    
    
    ) ON [PRIMARY]
    
    GO
    
        4
  •  0
  •   Mayank Jain    9 年前

    为此,必须创建相同的主键值,即自动递增。 因为主键正在升迁群集索引,所以它不能为空。 您必须创建标识增量1或任何值。

    至于现在,您必须再次创建表,并且通过设计,您必须增加值。

        5
  •  -2
  •   arena-ru    14 年前

    尝试使用代码

    INSERT INTO Party
    Values (@firstname,@lastname)
    

    而不是 INSERT INTO Party (FirstName, LastName) Values (@firstname,@lastname)