Sql-Server
基於幾個可為空的列派生計算列
我有點 SQL 新手。
我一直在嘗試創建一個
TAG
從其他 5 個列呼叫的自動生成列,其中一些列可以保留 NULL 標記。用於創建自動生成列的語法是:
[Tag] AS ([Tag Type]+[Parent Tag Type]+[Tag Area No]+[Tag seq No]+[Tag Suffix])
如果五列中沒有一列保留 NULL,則此自動生成 OK ,但如果我嘗試使用包含 NULL 的任何一列創建行,則自動生成不起作用,並將
TAG
列留空,即使它創建了行可以使用所有單獨的列數據。有沒有辦法讓自動生成與 NULL 一起使用?
您可以在 SQL Server 2012 或更高版本中使用該
CONCAT
函式NULL
,它會自動忽略,並在必要時將輸入隱式轉換為字元串類型。範例:
CREATE TABLE #Demo ( [Tag Type] char(1) NOT NULL, [Parent Tag Type] char(1) NULL, [Tag Area No] integer NOT NULL, [Tag seq No] integer NOT NULL, [Tag Suffix] char(1) NULL, [Tag] AS CONCAT([Tag Type], [Parent Tag Type], [Tag Area No], [Tag seq No], [Tag Suffix]) ); INSERT #Demo ([Tag Type], [Parent Tag Type], [Tag Area No], [Tag seq No], [Tag Suffix]) VALUES ('T', NULL, 1234, 1, NULL), ('T', 'P', 5678, 1, 'S'); SELECT * FROM #Demo AS D;
輸出:
標籤類型 | 父標籤類型 | 標籤區號 | 標籤序列號 | 標籤後綴 | 標籤 :------- | :-------------- | ----------: | ---------: | :--------- | :------- T | *空* | 第1234章 1 | *空* | T12341 T | 磷 | 5678 | 1 | 小號 | TP56781S
…如果範例被簡化並且元素之間要使用分隔符,請查看
CONCAT_WS()
SQL Server 2017 中引入的內容。
是的,你需要使用
ISNULL
來做到這一點:ISNULL([Tag Type], '') + ISNULL([Parent Tag Type], '') + ISNULL([Tag Area No], '') + ISNULL([Tag seq No], '') + ISNULL([Tag Suffix], '')
但公平的警告,如果有任何一行
NULL
跨越整個事情,你最終會得到一個空字元串。如果有必要,您可能希望用金絲雀值包裝整個事物ISNULL
以避免這種情況。根據數據類型,您可能還需要將
CONVERT
您的列轉換為字元串類型,ISNULL
以避免錯誤。