【问题标题】:Visual Studio 2013 SSDT - Edit data - IS NULL not work as filterVisual Studio 2013 SSDT - 编辑数据 - IS NULL 不能用作过滤器
【发布时间】:2017-06-08 19:18:08
【问题描述】:

我正在尝试使用 ssdt 过滤表格的某些行(左键单击表格、查看数据、排序和过滤)

在这里,我只需将IS NULL 作为条件添加到nvarchar 字段。
但是一旦我应用过滤器,我就会收到错误:

关键字 SET 附近的语法不正确

查看编辑器编写的查询,我看到条件是fldName =,没有我的NULL 支票的迹象

我该怎么做?

这是结果:

SELECT TOP 1000 [Ktyi_TS002_IdTipoDocumento] ,
[nvc_TS002_TipoDocumento] ,[nvc_TS002_IdFunzioneControllo] ,[bit_TS002_Annullato] 
FROM [dbo].[TS002_TipoDocumento] 
WHERE [nvc_TS002_IdFunzioneControllo] =

这是在 google 中找到的数据编辑器的一些图像,用于向不知道 ssdt 的人展示我正在谈论的内容:

【问题讨论】:

  • 你可以发布编辑的查询吗?
  • 您能详细说明您需要做什么吗?您是否需要为表中的列设置约束以指示它可能包含空值,还是需要将该列的默认值设置为空?
  • 您从未使用 SSDT 编辑数据吗?说真的,我不明白我的问题对你来说不清楚。你有没有尝试做我写的:左键单击表格,查看数据,排序和过滤并在条件列中设置 IS NULL?

标签: sql visual-studio sql-server-data-tools


【解决方案1】:

过滤器不支持 IS (NOT) NULL 表达式似乎是一个错误。

【讨论】:

  • 看来ssdt有很多bug
  • 还不支持。
  • 仍然不受支持。知道这么久了这个问题依然存在,而且关注的人这么少,让我觉得我应该放弃尝试使用这个工具了。
  • 请参阅下面的答案以了解此错误/缺少功能的解决方法。
【解决方案2】:

这是一个非常丑陋的 hack,但它可能对你有用。

您似乎需要在 = 符号左侧添加一个列名,以防止过滤器解析器更改查询。在我的例子中,我正在寻找空值的列是一个整数,所以我需要在左侧获取一个整数。

我还需要一个值用于我正在寻找空值的列,该值对于任何非空行都不存在。就我而言,这是 0。

Create MyTable 
(  Id    int primary key,
     ...
   MyNum  int
);

要在 MyNum 列中搜索具有空值的行,我这样做了:

[Id] - [Id] = IsNull([MyNum],0)

[Id] - [Id] 用于产生 0 并且不触发解析器将语句重写为 [MyNum] = stuff

解析器未重写右侧,因此将 NULL 值更改为 0。

我假设对于字符串你可以做类似的事情,也许

concatenate([OtherStringCol],'XYZZY') = ISNull([MyStrCol],concatenate([OtherStringCol],'XYZZY'))

“XYZZY”部分用于确保您不会遇到 [MyStrCol] = [OtherStringCol] 的情况。我假设这些列中不存在字符串“XYZZY”。

【讨论】:

    【解决方案3】:

    您可以通过为该表创建一个新的 SQL 查询并手动键入“IS NULL”的过滤器来解决此问题。

    1- 右键单击​​表格
    2- 点击“新建查询”
    3- 使用IS NULL 作为过滤器键入 SQL 语句

    这应该可以正常工作。

    【讨论】:

    • 您认为如何编辑来自查询的数据?正如我在标题和 cmets 中所写,我正在谈论如何在 EDIT DATA 表单中过滤行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多