首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >声明@变量为null的U

声明@变量为null的U
EN

Stack Overflow用户
提问于 2019-05-29 08:14:32
回答 1查看 254关注 0票数 0

我有一个主表,我正在从两个源表中摄取数据,而我没有加入其中。

其中一个表中没有一个列,所以我想用'insert into‘语句将Nulls插入到这个列中。为此,我尝试创建一个@missing_column变量。

代码语言:javascript
运行
复制
DECLARE @missing_column string IS NULL;  // This does not work.

你建议怎么做?我知道我可以将单词"NULL“写成字符串,并将其作为字符串插入。但如果列是小数,那就不适用了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-29 09:11:13

U-SQL使用C#类型系统,因此需要使用C#语法定义类型和赋值。这意味着您需要使用可空类型并分配正确类型的null值:

由于string已经是一个可空类型,所以您可以简单地使用:

代码语言:javascript
运行
复制
DECLARE @missing_column string = (string)null;

虽然如果您试图使用非空类型(如int ),但是您需要在变量和表列中指定可空版本:

代码语言:javascript
运行
复制
DECLARE @missing_column int? = (int?)null;

关于U DECLARE语句的正式文档可以找到这里

在重新阅读您的问题后,对于您的具体示例,您应该能够忽略INSERT语句中缺少的列。这将从指定的源表中赋值,并保留附加的、未指定的目标列null。要做到这一点,您显然需要在表列中有一个可空类型,这与我在上面所写的内容一致:

主表定义:

代码语言:javascript
运行
复制
CREATE TABLE dbo.MasterTarget
(
  Col1 Int,
  Col2 string,    // string is already nullable
  Col3 DateTime?, // DateTime is not, so need to specify DateTime? that accepts null values
  INDEX clx_Col1 CLUSTERED(Col1 ASC)
)
DISTRIBUTED BY HASH(Col1);

所有列数据负载:

代码语言:javascript
运行
复制
@src1 =
    EXTRACT Col1 Int,
            Col2 string,
            Col3 DateTime
    FROM "/SourceFile1.csv"
    USING Extractors.Csv();

INSERT INTO dbo.MasterTarget
(
  Col1,
  Col2,
  Col3
)
SELECT Col1,
       Col2,
       Col3
FROM @src1;

缺少的列数据加载:

代码语言:javascript
运行
复制
@src2 =
    EXTRACT Col1 Int,
            Col2 string
    FROM "/SourceFile2.csv"
    USING Extractors.Csv();

INSERT INTO dbo.MasterTarget
(
  Col1,
  Col2
)
SELECT Col1,
       Col2
FROM @src2;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56355941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档