作爲我們的OLAP建模工作流的一部分,我們通常會截斷字段,因爲上游數據源沒有限制或定義的數據類型。如果是自由形式的用戶輸入,則應該是10個字符的字符串的字段有時可以是50或100個字符。我被告知這可能會導致下游流程出現問題,這些流程涉及上傳到外部來源。如何在使用LEFT截斷列時記錄或通知()
我被要求找到一種方法來識別其中一個或多個這些字段被截斷的實例。
我們如何處理這些領域現在是這樣的:
SELECT
LEFT(FreeResponseField, 10) AS Comment
INTO
dbo.ModeledTable
FROM
dbo.SourceTable
從本質上講,如果字段大於10個字符,誰在乎,我們只取前10
如果dbo.SourceTable.FreeResponseField
有長度大於10,現在我們想以某種方式知道(是警告/錯誤消息還是插入到日誌表中)。我們有很多帶有很多字段的表,所以上面的例子是一個簡化。僅僅識別出現這種情況的字段和/或表中的元組將有助於查看這些問題發生的位置。
是這樣的可能嗎?您不能僅將源表的數據類型與目標表進行比較,因爲源表將所有內容設置爲VARCHAR(MAX)
。天真的方法是根據目標表的定義長度檢查每個元組的每個值的長度。
'我們經常截斷字段,因爲上游數據源沒有限制或定義的數據類型,這聽起來像一個糟糕的設計,真的,特別是如果您知道目標表是什麼數據類型。我認爲在這種情況下,檢查長度將是要走的路 – Lamak
只需在表中添加一個位/ int字段並使CASE語句標記已被截斷的行就足夠了? @Lamak有時上游的數據問題是不可避免的(數據來自外部來源,需要進行標準化或清理等) –
@JacobH我認爲我最大的問題是我不知道是否有一個乾淨的方法來確定何時LEFT()實際上減少了一個字段的長度。 [這個答案](https://stackoverflow.com/a/15091989/3220769)有一點幫助,但我想要觸發一個事件或更新時長度> X – TomNash