我正在努力将 DDL 主文件转换为 SQL Server 表,并且每个文件中的文件中都有 MISSING=ON,我将其解释为“如果丢失,则要注意”之类的事情。当它仅出现在某些行中时,如何将其转换为我正在创建的 SQL 表?示例如下:
FILENAME=EX_AGENCY_ACTIVE, SUFFIX=SQLORA , $
SEGMENT=EX_AGENCY_ACTIVE, SEGTYPE=S0, $
FIELDNAME=AGENCY_ACRONYM, ALIAS=AGENCY_ACRONYM, USAGE=A12, ACTUAL=A12,
**MISSING=ON**, $
FIELDNAME=AGENCY_ACTIVE_DATE, ALIAS=AGENCY_ACTIVE_DATE, USAGE=A40, ACTUAL=A40,
**MISSING=ON**, $
FIELDNAME=AGENCY_ACTIVE_FLAG, ALIAS=AGENCY_ACTIVE_FLAG, USAGE=A1, ACTUAL=A1, $
FIELDNAME=AGENCY_CODE, ALIAS=AGENCY_CODE, USAGE=A24, ACTUAL=A24,
**MISSING=ON**, $
FIELDNAME=AGENCY_EFFECTIVE_DATE, ALIAS=AGENCY_EFFECTIVE_DATE, USAGE=YYMD, ACTUAL=DATE,
**MISSING=ON**, $
FIELDNAME=AGENCY_NAME, ALIAS=AGENCY_NAME, USAGE=A40, ACTUAL=A40,
**MISSING=ON**, $
FIELDNAME=AGENCY_WK, ALIAS=AGENCY_WK, USAGE=D20.6, ACTUAL=D8, $
目前我正在考虑在所有列中添加
NOT NULL
,但我预计这些表中的很多都会丢失数据,因为并非所有内容都是“必需的”。这样的情况我会做吗?
SET Missing = CASE
WHEN FieldName, Usage, Actual IS NULL
THEN 0
ELSE 1
END
这是最适合您情况的。
DDL 主文件中的
MISSING=ON
指令确实指示该字段可以缺失或为空。
在 SQL Server 中,您可以通过设置列允许空值来实现此目的。这是创建表的示例。
CREATE TABLE EX_AGENCY_ACTIVE (
AGENCY_ACRONYM varchar(12) NULL,
AGENCY_ACTIVE_DATE varchar(40) NULL,
AGENCY_ACTIVE_FLAG char(1) NOT NULL,
AGENCY_CODE varchar(24) NULL,
AGENCY_EFFECTIVE_DATE date NULL,
AGENCY_NAME varchar(40) NULL,
AGENCY_WK decimal(20, 6) NULL
);
通过将列设置为
NULL
,您可以允许该列接受空值,这相当于 MISSING=ON
指令。
在您的情况下,建议使用
CASE
语句来设置 missing
列的解决方案在这种情况下是不必要的。