SQL INSERT INTO 语句 - 如何在字段为空字符串时插入 space?

SQL INSERT INTO statement - how to insert space when field is an empty string?

我有一个 INSERT INTO 语句,我需要检查我插入的字段值之一是否为空字符串。如果是,我需要插入一个实际的 SPACE 而不是空字符串。

INSERT INTO Vendors (LegacyID, ExternalID1, ExternalID2, EIN, LegalName, DBAName, ...)

我如何确定 EIN 是否为空字符串 (''),如果是,实际插入一个 space (' ')?

更新语句也是如此

Update Vendors SET LegacyID = ds.LegacyID, ExternalID1 = ds.ExtID1, ExternalID2 = ds.ExtID2, ...)

任何帮助和示例将不胜感激。谢谢。

您没有包含 INSERTVALUES 部分,也没有包含 UPDATE 中的 EIN 部分,因此您省略了您所在的部分d 实际上正在做出改变。

因此,我只能对您的实际字段进行最佳猜测,但答案的一般要点是在要插入的值周围使用 CASE 语句.

示例:

-- If field is '', then use ' '.
-- Otherwise, use it as-is.
CASE field WHEN '' THEN ' ' ELSE field END

潜在用例(假定的字段名称):

INSERT INTO Vendors (EIN, ds.LegacyID, ...) VALUES (CASE ds.EIN WHEN '' THEN ' ' ELSE ds.EIN END, ds.LegacyID, ...)
UPDATE Vendors SET EIN = CASE ds.EIN WHEN '' THEN ' ' ELSE ds.EIN END

您可以对所有值使用 IIF

我不确定哪些是 varchar 值,所以我要猜测一下。我也不知道你是如何获得你的价值的,所以我现在假设是硬编码的。

INSERT INTO Vendors (LegacyID, ExternalID1, ExternalID2, EIN, LegalName, DBAName, ...) 
VALUES (LegacyID, ExternalID1, ExternalID2, EIN, IIF(LegalName = '', ' ', LegalName), IIF(DBAName = '', ' ', DBAName), ...)

-- or

Update Vendors SET LegacyID = ds.LegacyID
    , ExternalID1 = ds.ExtID1
    , ExternalID2 = ds.ExtID2
    , LegalName = IIF(ds.LegalName = '', ' ', ds.LegalName)
    , DBAName = IIF(ds.DBAName = '', ' ', ds.LegalName)
    ...

此外,我希望您有一个有效的 reason/business 案例来执行此操作。如果你真的想要一个空值,最好使用空字符串并且没有值使用 null。持久化 space 似乎只是一个奇怪的要求,可能只在表示层中需要,但不应该将其放入持久性存储中。