Sql server 2008 请求输入空列的存储过程
我有两个具有主外键关系的表。 外键关系中的表的某些列可以为null(不是fk列) 当我使用除可接受空值的列(Path1、Path2、…Path5)以外的所有输入值运行以下sp时,编译器抛出错误,指出Path1、Path2…Path5不能为空Sql server 2008 请求输入空列的存储过程,sql-server-2008,tsql,stored-procedures,sql-server-2008-r2,Sql Server 2008,Tsql,Stored Procedures,Sql Server 2008 R2,我有两个具有主外键关系的表。 外键关系中的表的某些列可以为null(不是fk列) 当我使用除可接受空值的列(Path1、Path2、…Path5)以外的所有输入值运行以下sp时,编译器抛出错误,指出Path1、Path2…Path5不能为空 ALTER PROCEDURE [dbo].[Submit_Product] @SubjectId uniqueidentifier, -- ... other required parameters ... -- optional
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
...
必须在SP中为应接受空值的值添加默认值 例如:
@test nvarchar(200) = NULL
然后,如果您不提供任何其他值,它将插入一个空值。您必须在SP中为应接受空值的值添加一个默认值 例如:
@test nvarchar(200) = NULL
如果您不提供任何其他值,那么它将插入一个空值。我猜错误来自您的应用程序,而不是编译存储过程 在任何情况下,您都应该在存储过程中设置默认值,如下所示:
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
)
通过这种方式,您可以添加另一个具有默认值的列,并且您现有的存储过程不会受到影响。我猜错误来自您的应用程序,而不是编译存储过程 在任何情况下,您都应该在存储过程中设置默认值,如下所示:
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
)
通过这种方式,您可以添加另一个具有默认值的列,并且您现有的存储过程不会受到影响