我有一个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, ...)
非常感谢任何帮助和示例。谢谢。
答案 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
。持久化空间似乎只是一个奇怪的要求,可能只是在表示层中需要的东西,但可能不应该进入持久性存储。