我有一個查詢,我想在某些列有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