繁体   English   中英

在视图中使用时,是否可以使不可为空的列可为空? (sql server)

[英]Is it possible to make a non-nullable column nullable when used in a view? (sql server)

首先,我有两个表, PersonNamesPersonNameVariations 搜索名称时,它会找到与PersonNames可用的名称之一最接近的名称,并将其记录在PersonNameVariations表中(如果它尚未存在)。

我使用一个存储过程来搜索PersonNames的传入PersonNameVariation ,回到双方的信息PersonName发现PersonNameVariation这是相比的。

由于我使用的是Entity Framework,我需要在Import Function返回一个复杂类型,但由于某种原因,它说我当前的框架不支持它。 我的最后一个选择是使用Entity返回我的存储过程中。

我需要回来的结果是双方的信息PersonName被发现和PersonNameVariation所记录。 由于我无法返回两个实体,因此我创建了一个视图PersonSearchVariationInfo并将其添加到我的实体框架中,以便将其用作要返回的实体。

问题是搜索不会总是返回Person Name匹配 在某些情况下,它需要能够仅返回PersonNameVariation数据,这意味着PersonSearchVariationInfoPersonName相关的所有字段都需要为空

我怎样才能看到我的观点并使一些字段可以为空? 当我直接在实体框架中执行它时,我得到一个映射错误:

错误4错误3031:从第1202行开始映射片段时出现问题:表中的不可空列myproject_vw_PersonSearchVariationInfo.DateAdded myproject_vw_PersonSearchVariationInfo被映射到可空的实体属性。 C:\\ Users \\ Administrator \\ Documents \\ Visual Studio 2010 \\ Projects \\ MyProject \\ MyProject.Domain \\ EntityFramework \\ MyProjectDBEntities.edmx 1203 15 MyProject.Domain

有人有主意吗?

谢谢,
马特

也许。

你什么时候想要它可以为空? 在这里,我使用NULLIF强制为空,并假设我有空字符串。 YMMV当然。

元数据对于视图中列的可为空性也是正确的

CREATE TABLE dbo.Foo (ColNonNull varchar(100) NOT NULL)
GO
INSERT dbo.Foo VALUES (NULL) --fails
GO
INSERT dbo.Foo VALUES ('bar') --works
INSERT dbo.Foo VALUES ('') --works
GO
CREATE VIEW dbo.vwFoo
AS
SELECT NULLIF(ColNonNull, '') AS ColNull FROM dbo.Foo
GO
SELECT * FROM dbo.vwFoo
GO
SELECT
    COLUMNPROPERTY(OBJECT_ID('dbo.Foo'), 'ColNonNull', 'AllowsNull') AS TableColNullable,
    COLUMNPROPERTY(OBJECT_ID('dbo.vwFoo'), 'ColNull', 'AllowsNull') AS ViewColNullable
GO

如果在基础表中不可为空,则不能在视图中使列可以为空。

你会怎么处理? 您在视图中插入一个新行并将该列保留为NULL,但在基础表中,您必须提供一个值....它将无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM