我有两个主外键关系表。 外键关系中的表有一些列可以为null(不是fk列) 当我使用除了可以接受空值(Path1,Path2,... Path5)的列之外的所有输入值运行以下sp时,编译器抛出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
...
答案 0 :(得分: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语句中指定列名,以避免将来出现向后兼容性陷阱......
INSERT INTO dbo.ImagePath (Id, Path1, Path2, Path3, Path4, Path5)
VALUES (
@SubjectId,
@Path1,
@Path2,
@Path3,
@Path4,
@Path5
)
这样,您可以添加另一个具有默认值的列,并且不会影响您现有的存储过程。
答案 1 :(得分:2)
您必须在SP中为应接受空值的值添加默认值。
例如:
@test nvarchar(200) = NULL
如果您不提供任何其他值,则会插入空值。