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

时间:2016-11-22 20:50:21

标签: sql sql-server tsql insert-update

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

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

如何判断EIN是否为空字符串(''),如果是,实际插入空格('')?

UPDATE语句

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

非常感谢任何帮助和示例。谢谢。

2 个答案:

答案 0 :(得分:1)

您的VALUES中没有INSERT部分,EIN中也没有UPDATE,所以您省略了实际的部分正在做出改变。

因此,我只能对您的实际字段进行最佳猜测,但答案的一般要点是在要插入的值周围使用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

答案 1 :(得分:1)

您可以对所有值使用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)
    ...

此外,我希望您有充分的理由/商业案例。如果你真的想要一个空值,最好使用的是一个空字符串,没有值使用null。持久化空间似乎只是一个奇怪的要求,可能只是在表示层中需要的东西,但可能不应该进入持久性存储。