我有一个查询,我想在某些列有NULL
所有记录:F#sqlProvider的 - NULL在WHERE子句
query {
for a in db.Dbo.DataAlert do
where (a.DateSent = null)
select a
}
但是,这将引发一个错误,指出null不是一个有效的值。
写这个查询的正确方法是什么?
更新:我正在使用this SQLProvider。
我有一个查询,我想在某些列有NULL
所有记录:F#sqlProvider的 - NULL在WHERE子句
query {
for a in db.Dbo.DataAlert do
where (a.DateSent = null)
select a
}
但是,这将引发一个错误,指出null不是一个有效的值。
写这个查询的正确方法是什么?
更新:我正在使用this SQLProvider。
通过指定UseOptionTypes静态参数,可以生成可为空列的选项类型。默认值是false
,它返回例如0而不是NULL。这在文档中没有很好的记录,例如在Querying文档页面中没有提及,并且在Home页面中只有一个示例。
一旦您设置UseOptionTypes到true
:
type sql = SqlDataProvider<
ConnectionString = connectionString,
DatabaseVendor = Common.DatabaseProviderTypes.MSSQLSERVER,
UseOptionTypes = true
>
可空字段将返回选项类型,让你写:
query {
for a in db.Dbo.DataAlert do
where (a.DateSent = None)
select a
}
是的,的确!我想他想要'a.DateSent = None'。 :-) – s952163
哎唷!你是对的 –
最彻底的方法是指定useOptTypes = true
如其他回答。但是,这可能涉及到重构其他代码。如果因为任何原因无法执行此操作,则需要检查null的defaultValue。因此,例如,如果该列的类型是string
,那么“”,或者如果它是和int
然后是0.
似乎SQLProvider不会为可空列列表生成可为空的属性。您可能应该使用带有EF或其他ORM的LINQ。附注:我不能相信......涉及到......它是使用F#进行ETL。尝试向SqlBulkCopy发送一个类型提供者列,例如 –
您使用的是哪个SQLProvider btw,而不是'isNull'做你想做的事情? – s952163
@ s952163我已添加链接。 – Anil