小编Zac*_*ith的帖子

为什么 COUNT() 为“NULL”聚合返回 0?

SELECT 语句返回几行:

SELECT
  ColA
FROM
  TableA
WHERE
  ColA IS NULL
Run Code Online (Sandbox Code Playgroud)

我在 TableA 中得到 47 行的 ColA 为“NULL”。

ColA
NULL
NULL
NULL
etc...
Run Code Online (Sandbox Code Playgroud)

如果我向这个查询添加一个聚合:

SELECT
  ColA,
  COUNT(ColA) AS theCount
FROM
  TableA
WHERE
  ColA IS NULL
GROUP BY ColA
Run Code Online (Sandbox Code Playgroud)

我得到

ColA | theCount
NULL | 0
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该怎么做才能避免这种情况?

null sql-server aggregate

11
推荐指数
2
解决办法
6万
查看次数

如何在 SSIS 中更改脚本任务版本?

我在 VS2015 的一个 SSIS 项目中添加了一个脚本任务。当我部署到 SQL Server 2016 时,我收到一条错误消息,指出该version 15.0脚本不受支持。

这是哪里version 15 come from?阅读有关 Stack Overflow 的其他类似问题,我发现您可以将项目的目标版本设置为 SQL Server 2012 - 我就是这样做的(最终部署目标是 SQL Server 2012)。

我还尝试删除并重新创建脚本任务。在脚本的信息中,它说它使用的是 C# 的 V10。

我该如何解决这个问题?

脚本任务:错误:从 XML 加载脚本任务时出现异常:System.Exception:脚本任务““ST_a1ad9dc5972c42b68c12a13155f10b6d””使用了此版本的 Integration Services 不支持的 15.0 版脚本。要运行包,请使用脚本任务创建新的 VSTA 脚本。在大多数情况下,当您在 %SQL_PRODUCT_SHORT_NAME% Integration Services 中打开 SQL Server Integration Services 包时,脚本会自动转换为使用受支持的版本。在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptTask.LoadFromXML(XmlElement elemProj, IDTSInfoEvents events)"

我还在 SSDT 2012 中打开了该项目并使用不同的名称重建。同样的错误。好像肯定有没有被删除的引用什么的。

关于这个问题的解决方案(/sf/ask/2442528721/)都没有奏效。

查看脚本所在包中的 XML,我可以轻松找到该任务,并且在任何地方都没有提到版本 15。

============ 编辑

将项目复制到托管数据库的机器上,打开 VS2015 并从那里部署后,程序包就会执行。

然后当回到我的机器并在那里建造时,它没有。

这是一个错误吗?还是我期望构建生成与使用 VS 中的向导相同的部署向导来做一些愚蠢的事情...

我有 SQL Server …

ssis

10
推荐指数
1
解决办法
3万
查看次数

在源代码管理中包含 SQL Server 代理作业的最佳方法是什么?

我发现,如果我将 SQL Server 代理作业编写为脚本开头的“创建到”脚本use msdb- 所以我假设作业存储在 msdb 数据库中?

将 SQL Server 作业添加到 Visual Studio 数据库项目的最佳方法是什么?我将 msdb 数据库添加到数据库解决方案中,但这似乎没有对作业的任何引用。

我希望将作业与数据库一起部署/更新......这似乎不可能?

sql-server visual-studio sql-server-agent

10
推荐指数
1
解决办法
8211
查看次数

`OVER` 子句中的 `ORDER BY` 和 `PARTITION BY` 参数有什么区别?

下面的这些查询都给了我完全相同的结果,我认为这是因为我的数据集而不是参数如何工作。

使用OVER子句时,ORDER BY和之间有什么区别PARTITION BY

稍微不同的是,为什么不使用该术语GROUP BY而不是更复杂的声音PARTITION BY,因为在这种情况下使用分区似乎与分组实现了相同的目的。我知道您可以更改这些内部分区,然后这些更改会反映在表中。是这个原因吗?

查询 1:

SELECT
    CP.iYear,
    AVG(AVG(CP.mUpgradeCost)) OVER(ORDER BY iYear) AS [avg]
FROM ProForma.dbo.CapitalProject CP
GROUP BY CP.iYear
Run Code Online (Sandbox Code Playgroud)

查询 2:

SELECT
    CP.iYear,
    AVG(AVG(CP.mUpgradeCost)) OVER(PARTITION BY iYear) AS [avg]
FROM ProForma.dbo.CapitalProject CP
GROUP BY CP.iYear
Run Code Online (Sandbox Code Playgroud)

window-functions

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

如何透视 SQL Server 中的多个列?

将表格“展平”成单行的最佳方法是什么?

例如,使用下表:

+-----+-------+-------------+------------------+
| Id  | hProp | iDayOfMonth | dblTargetPercent |
+-----+-------+-------------+------------------+
| 117 |    10 |           5 |           0.1400 |
| 118 |    10 |          10 |           0.0500 |
| 119 |    10 |          15 |           0.0100 |
| 120 |    10 |          20 |           0.0100 |
+-----+-------+-------------+------------------+
Run Code Online (Sandbox Code Playgroud)

我想生成下表:

+-------+--------------+-------------------+--------------+-------------------+--------------+-------------------+--------------+-------------------+
| hProp | iDateTarget1 | dblPercentTarget1 | iDateTarget2 | dblPercentTarget2 | iDateTarget3 | dblPercentTarget3 | iDateTarget4 | dblPercentTarget4 |
+-------+--------------+-------------------+--------------+-------------------+--------------+-------------------+--------------+-------------------+
|    10 |            5 |              0.14 |           10 …
Run Code Online (Sandbox Code Playgroud)

sql-server pivot t-sql

9
推荐指数
2
解决办法
7万
查看次数

SQL Server 是否使用多版本并发控制 (MVCC)?

阅读 IBM 网站HERE上发布的 CouchDB 的旧概述,我惊讶地发现以下内容:

大多数现代数据库已经开始从锁定机制转向 MVCC,包括 Oracle(自 V7 起)、MySQL(与 InnoDB 一起使用时)和 Microsoft® SQL Server 2005 及更高版本。

我目前使用 SQL Server 相当多(V2012)并且从未考虑过可能存在任何形式的 MVCC。我之前也在with (tablock, holdlock)存储过程中使用过。

SQL Server 是否真的在任何地方实现了 MVCC,它如何与是否实现的想法相协调with (tablock, holdlock)

sql-server mvcc

8
推荐指数
1
解决办法
4926
查看次数

SQL Server:更改现有数据库的排序规则是否安全?

我是 SQL Server 的新手,不知道 T-SQL 可能不区分大小写的可能性。

我一直在通过拆分表和约束来规范化实体。我很害怕如果我现在更改排序规则,例如,如果“不区分大小写”的外键值指向具有不同大小写的 PK 值,那么其中一些约束可能无效。

如果我在数据库上运行这个查询(在基本数据库上测试):

ALTER DATABASE <db_name>
COLLATE SQL_Latin1_General_Cp1_CS_AS ;
GO
Run Code Online (Sandbox Code Playgroud)

如果违反某些约束会发生什么?

是否有任何其他原因我应该小心进行数据库范围的更改,例如更改排序规则?

sql-server collation sql-server-2012

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

替代 SQL Server 2012 中的“FOR JSON”?

在 SQL Server 2016 中,我可以JSON按照文档Format Query Results as JSON with FOR JSON (SQL Server) 中所述输出查询结果

SELECT * 
FROM x 
FOR JSON PATH
Run Code Online (Sandbox Code Playgroud)

但我发现这在 SQL Server 2012 中不受支持。

JSONSQL Server 2012 中是否有将表格数据转换为数据的内置方法?

为了使这个交叉兼容,我希望能够for json path在 SQL Server 2012 中使用。

sql-server sql-server-2012 json

5
推荐指数
2
解决办法
3万
查看次数

查询优化的“质量”是否因数据库提供商而异?

除了“它发生”之外,我对任何数据库中的查询优化都没有清楚的了解。现在我刚刚看到了一篇“中等”的帖子,它讨论了在优化方面使用 PostgreSQL CTE 的陷阱,因为 CTE 只评估一次,并且任何可能在 CTE 使用方式、数据库方面应用的优化就是不能申请。

但是博客文章中的示例似乎很容易优化 - 即

SELECT * FROM foo WHERE id = 500000;
Run Code Online (Sandbox Code Playgroud)

对比

WITH cte AS (
  SELECT * FROM foo
)
SELECT * FROM cte WHERE id = 500000;
Run Code Online (Sandbox Code Playgroud)

如果在第一个要求上懒惰地计算 CTE,那么我可以想象这两个查询可以以相同的方式进行优化(至少我认为)。

这让我想知道...... SQL Server 是否能够比 postgres 更好地优化这样的查询?

数据库之间在优化查询方面的程度/能力是否存在已知差异?

postgresql sql-server optimization cte

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

是否可以在 PostgreSQL 中使用单个语句更新插入到自引用表中?

如果我有一张桌子A,就像这样:

A {
 id SERIAL
 title TEXT
 ...
 parentId INT references A.id via a foreign key constraint
}
Run Code Online (Sandbox Code Playgroud)

我正在从源表中提取数据 - A_SOURCE- 没有parentId列的地方。取而代之的是一parentTitle列。所以源表看起来像这样:

A_SOURCE {
  title TEXT
  parentTitle TEXT
}
Run Code Online (Sandbox Code Playgroud)

我开始编写一个 upsert 语句以A通过从表中选择插入到表中,A_SOURCE然后才意识到我无法轻松地parentTitle将源中的列解析parentId为目标中的 a。

由于我无法确定在处理子项时是否已插入父项,因此连接或子查询可能不会返回任何结果。

我的 upsert 语句看起来像这样:

with source as (
  select
   title
   parentTitle
  from A_SOURCE 
)

insert into A
select
title
... I don't think I can resolve to parentId here?
from source
on …
Run Code Online (Sandbox Code Playgroud)

postgresql upsert self-join

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