代码之家  ›  专栏  ›  技术社区  ›  Kenny Mann

在存储过程参数中插入“null”(字面意思)

  •  1
  • Kenny Mann  · 技术社区  · 14 年前

    IF @LastName IS NULL // Test: Do stuff
    

    但当我这么做的时候:

    INSERT INTO Person (<params>) VALUES (<stuff here>, @LastName, <more stuff here>); // LastName is 'Null'
    

    它说LastName不接受空值。

    我试过创建一个temp表,看看是否可以手动复制它,但它似乎工作得很好。下面是我创建的示例:

    DECLARE @myval VARCHAR(50)
    SET @myval = 'Null'
    CREATE TABLE #mytable( name VARCHAR(50))
    INSERT INTO #mytable VALUES (@myval)
    SELECT * FROM #mytable
    DROP table #mytable
    

    你有没有想过我该怎么解决这个问题?

    edit:设置LastName的方法是--myPerson.LastName=textBoxLastName.Text;

    编辑:唯一的约束是默认值“”。

    编辑:好的,我已经确认它是亚音速的,想玩得更聪明。

     if (param.ParameterValue == null || Utility.IsMatch(param.ParameterValue.ToString(), "null"))
    

    使用探查器的好主意,我完全忘了。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Kenny Mann    14 年前

        2
  •  0
  •   Raja    14 年前

    请试试这个:

    哦…我完全误解了这个问题。我认为应该在数据库列中设置一些约束。请尝试直接在DB中编写insert查询,看看它是否会崩溃。

    我试了一下,结果一如预期:

    DECLARE @myval VARCHAR(50)
    SET @myval = 'null'
    CREATE TABLE #mytable( name VARCHAR(50) NULL CHECK (name <> 'NULL'))
    INSERT INTO #mytable VALUES (@myval)
    SELECT * FROM #mytable WHERE name is not null
    DROP table #mytable