小编clw*_*eks的帖子

为什么"SELECT DISTINCT a,b FROM ..."返回的记录少于"SELECT DISTINCT A +'|' + B FROM ......"?

我有一个查询,它选择了一系列与客户名称和地址相关的字段,但归结为:

SELECT DISTINCT a, b, c, ... FROM big_dumb_flat_table
Run Code Online (Sandbox Code Playgroud)

它返回一堆记录(10986590).当我替换select-list中的逗号以将其格式化为管道分隔的连接字符串时:

SELECT DISTINCT a + '|' + b + '|' + c + '|' + ... FROM big_dumb_flat_table
Run Code Online (Sandbox Code Playgroud)

它返回了248条记录.我已经向自己保证,任何一个领域都没有管道可能会破坏返回集合的保真度.这里发生了什么?

sql sql-server sql-server-2005 concatenation

7
推荐指数
1
解决办法
1673
查看次数

这些代码块之间的区别是什么,为什么前者失败了,我应该如何调试呢?

我写:

    MfgRecipeTypeKey = If(placeholderMRTK Is Nothing, 0, placeholderMRTK)
Run Code Online (Sandbox Code Playgroud)

并且一切正常,但是当placeholderMRTK实际上 Nothing时,它会失败,不会引发异常,只是退出sub(MyBase.Load以获取对话框表单)并继续使用该应用程序.当我把它重写为:

    If placeholderMRTK Is Nothing Then
        MfgRecipeTypeKey = 0
    Else
        MfgRecipeTypeKey = placeholderMRTK
    End If
Run Code Online (Sandbox Code Playgroud)

它工作正常.我认为这两者是合乎逻辑的等价物.

所以:

1)我不知道的两者之间的实际差异是什么?

2)为什么第一个失败?我有点想知道它是否是一个棘手的类型转换问题,但placeholderMRTK和MfgRecipeTypeKey都被声明为Byte?(可空字节)类型.

3)为什么执行只是脱离了sub而没有给我一个例外.当该行在Visual Studio中突出显示(Pro 2013如果重要)并且我f11用于下一行时,它只是跳出并运行数据网格渲染事件然后呈现我的对话框,但没有一些重要的数据分配发生在引擎盖下.鉴于它是这样做的(这是2013年的新行为吗?),我该怎么调试?

感谢您的时间和关注!

vb.net

5
推荐指数
1
解决办法
58
查看次数

为什么我将 Nullable(Of Int32) = 0 设置为 Nothing 后?

我认为我遗漏了一些关于可空类型的基本知识。希望这个例子能够开启新的理解,但至少,也许我们可以让这件事顺利进行。

在类(对话框形式)中,我声明:

Property ProductStructureHeaderKey As Int32?
Run Code Online (Sandbox Code Playgroud)

在另一个类中,我声明该对话框的一个实例,并尝试使用以下行设置该属性:

    dr.ProductStructureHeaderKey = If(parentRow.Cells(1).Value Is Nothing, Nothing, Int32.Parse(parentRow.Cells(1).Value))
Run Code Online (Sandbox Code Playgroud)

当该行将 Nothing 分配给属性时,该属性等于 0。(然后,当我希望它传递 NULL 时,它会将 0 传递给数据库。)

这不是我所期望的,我一直在寻找代码(SO、MSDN 等),看起来我做的事情是正确的,但显然,我没有。那么,朋友们,我做错了什么?如何使用可空类型来满足我的需求?

vb.net nullable

2
推荐指数
1
解决办法
1334
查看次数