1

我有两个具有主外键关系的表。外键关系中的表有一些可以为空的列(不是 fk 列)当我使用所有输入值运行以下 sp 时,除了可以接受空值的列(Path1、Path2、...编译器抛出 Path1、Path2...Path5 不能为空的错误。

ALTER PROCEDURE [dbo].[Submit_Product]
    @SubjectId uniqueidentifier,
    -- ... other required parameters ...

    -- optional parameters:
    @Path1 nvarchar(75),
    @Path2 nvarchar(75),
    @Path3 nvarchar(75),
    @Path4 nvarchar(75),
    @Path5 nvarchar(75)
AS
...
4

2 回答 2

4

我猜错误来自您的应用程序,而不是来自编译存储过程?

在任何情况下,您都应该在存储过程中设置默认值,如下所示:

ALTER PROCEDURE [dbo].[Submit_Product]  
    (  
    @SubjectId uniqueidentifier,  
    @City nvarchar(30),  
    @Area nvarchar(20),  
    @Description nvarchar(400),  
    @ContactNo nvarchar(15),  
    @UserId int,  
    /*Fk Table*/  
    @Path1 nvarchar(75) = null,  
    @Path2 nvarchar(75) = null,  
    @Path3 nvarchar(75) = null,  
    @Path4 nvarchar(75) = null,  
    @Path5 nvarchar(75) = null 
    )  
AS  

作为最佳实践,我建议在您的插入语句中指定列名,以避免将来出现向后兼容性陷阱......

INSERT INTO dbo.ImagePath (Id, Path1, Path2, Path3, Path4, Path5) 
VALUES (
  @SubjectId, 
  @Path1, 
  @Path2, 
  @Path3, 
  @Path4, 
  @Path5 
) 

这样,您可以添加另一个具有默认值的列,并且您现有的存储过程不会受到影响。

于 2012-06-17T19:23:07.537 回答
2

您必须在 SP 中为应该接受空值的值添加默认值。

例如:

@test nvarchar(200) = NULL

然后,如果您不提供任何其他值,它将插入一个空值。

于 2012-06-17T19:06:53.457 回答