标签: sql-server-2017

在 Linux 中获取“sqlcmd sqlcmd: command not found”?

每当我跑步时,sqlcmd我都会收到“找不到命令”

sqlcmd -S localhost -U SA -P '<YourPassword>'
sqlcmd: command not found
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

sql-server ubuntu sql-server-2017

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

SSRS 很快就会灭绝,PowerBI 会成为新模式吗?

我读到 SQL Server 2017 现在将包含 PowerBI Server。他们还将 SSRS 移动到不同的安装程序,因此它不会打包在原始 SQL Server 安装中。这是否意味着微软最终会尝试弃用 SSRS?我们的团队是否应该尝试在 PowerBI 中构建新报告并转换以前的 SSRS 报告?

sql-server ssrs business-intelligence powerbi sql-server-2017

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

SQL Server 错误,“FETCH 语句中选项 FIRST 的使用无效。”

从 2012 年开始,SQL Server 文档显示他们支持OFFSET..FETCH我尝试使用的而不是LIMIT.

以下在 PostgreSQL 中可以很好地对结果集进行采样,

SELECT *
FROM ( VALUES (1),(2),(3) ) AS t(x)
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)

但是,使用 SQL Server,我得到

Msg 153, Level 15, State 2, Line 4
Invalid usage of the option FIRST in the FETCH statement.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?SQL Server 是否支持标准化的OFFSET.. FETCH

sql-server offset-fetch sql-server-2017

9
推荐指数
3
解决办法
4324
查看次数

无法删除没有关联文件的文件组

我在 SQL Server 2017 CU3 上遇到一些奇怪的错误消息。我正在迁移数据库并重新组织文件组。“重组”是指我使用存储过程在新文件组上为对象创建分区函数和分区方案,在分区时重建索引,然后删除分区。

最后我有一些空的文件组。他们的文件删除。文件组本身也被删除。这在大多数情况下效果很好。但是,对于两个数据库,我删除了文件...留下了一个没有关联文件的文件组,但是

ALTER DATABASE REMOVE FILEGROUP
Run Code Online (Sandbox Code Playgroud)

抛出错误 5042:

无法删除文件组“xyz”,因为它不为空。

我怎样才能摆脱那个空的文件组......可能是什么问题?

我已经阅读了一些常见问题,但是它们在我的系统中不存在:

  • 检查:

    SELECT * FROM sys.partition_schemes;
    SELECT * FROM sys.partition_functions;
    
    Run Code Online (Sandbox Code Playgroud)

    0 行...数据库中没有剩余的分区对象

  • UPDATE STATISTICS 对于数据库中的所有对象

    没有效果

  • 检查文件组上的索引:

    SELECT * FROM  sys.data_spaces ds
    INNER JOIN sys.indexes i
    ON ds.data_space_id = i.data_space_id
    WHERE ds.name = 'xyz'
    
    Run Code Online (Sandbox Code Playgroud)

    0 行

  • 检查文件组中的对象:

    SELECT
        au.*,
        ds.name AS [data_space_name],
        ds.type AS [data_space_type],
        p.rows,
        o.name AS [object_name]
    FROM sys.allocation_units au
        INNER JOIN sys.data_spaces ds …
    Run Code Online (Sandbox Code Playgroud)

sql-server filegroups sql-server-2017

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

从 SSMS 时态表中选择 TOP N Rows missing

我在我的数据库中使用时态表,当我在 Management Studio 2017 (v17.4 14.0.17213.0) 中右键单击我的表时,我没有在上下文菜单中看到选择前 1000 行(非时态表没有问题)

ssms 丢失选择顶部

任何想法如何让这个上下文菜单回来?我感觉这与我运行的 SQL Server 版本有关(SQL 13.1.4001.0 Express Edition)

sql-server ssms sql-server-2016 sql-server-2017

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

“警告:操作导致残留 I/O”与键查找

我在 SQL Server 2017 执行计划中看到过这个警告:

警告:操作导致剩余 IO [原文如此]。实际读取的行数为 (3,321,318),但返回的行数为 40。

这是 SQLSentry PlanExplorer 的一个片段:

在此处输入图片说明

为了改进代码,我添加了一个非聚集索引,以便 SQL Server 可以访问相关行。它工作正常,但通常会有太多(大)列包含在索引中。它看起来像这样:

在此处输入图片说明

如果我只添加索引而不包含列,如果我强制使用索引,它看起来像这样:

在此处输入图片说明

显然,SQL Server 认为键查找比剩余 I/O 昂贵得多。我有一个没有太多测试数据的测试设置(还),但是当代码投入生产时,它需要处理更多的数据,所以我很确定需要某种非聚集索引。

当您在 SSD 上运行时,键查找真的那么昂贵,我必须创建全脂索引(有很多包含列)?


执行计划: https : //www.brentozar.com/pastetheplan/?id=SJtiRte2X它是长存储过程的一部分。寻找IX_BatchNo_DeviceNo_CreatedUTC.

sql-server optimization execution-plan nonclustered-index sql-server-2017

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

在提交之前,SQL Server 是否允许(使可见)在事务中的 DDL 到事务?

在 PostgreSQL 中,我可以创建一个包含一些测试数据的表,然后在事务中将其迁移到不同类型的新列,从而导致一个表重写COMMIT

CREATE TABLE foo ( a int );
INSERT INTO foo VALUES (1),(2),(3);
Run Code Online (Sandbox Code Playgroud)

其次是,

BEGIN;
  ALTER TABLE foo ADD COLUMN b varchar;
  UPDATE foo SET b = CAST(a AS varchar);
  ALTER TABLE foo DROP COLUMN a;
COMMIT;
Run Code Online (Sandbox Code Playgroud)

但是,Microsoft 的 SQL Server 中的相同内容似乎会产生错误。比较这个工作db fiddle,其中ADD(列)命令在事务之外,

-- txn1
BEGIN TRANSACTION;
  ALTER TABLE foo ADD b varchar;
COMMIT;

-- txn2
BEGIN TRANSACTION;
  UPDATE foo SET b = CAST( a AS varchar );
  ALTER TABLE …
Run Code Online (Sandbox Code Playgroud)

sql-server transaction ddl sql-server-2017

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

为什么这个查询,缺少一个 FROM 子句,而不是错误?

所以我们有一个带有错字的子查询的查询。它缺少 FROM 子句。但是当你运行它时,它不会出错!为什么!?


SELECT

    1
   ,r.id
   ,'0D4133BE-C1B5-4141-AFAD-B171A2CCCE56'
   ,GETDATE()
   ,1
   ,'Y'
   ,'N'
   ,oldItem.can_view
   ,oldItem.can_update

FROM Role r

JOIN RoleObject oldReport
    ON r.customer_id = oldReport.customer_id

JOIN RoleItem oldItem
    ON oldReport.id = oldItem.role_object_id
        AND r.id = oldItem.role_id

WHERE r.id NOT IN (SELECT
        role_id
    WHERE role_object_id = '0D4133BE-C1B5-4141-AFAD-B171A2CCCE56')

AND oldReport.id = '169BA22F-1614-4EBA-AF45-18E333C54C6C'
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2017

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

为什么 MS SQL Server SEQUENCE 没有像 Oracle 那样的 ORDER 参数?

for T-SQL的文档中CREATE SEQUENCE,可以看到该CREATE SEQUENCE命令没有ORDER参数。

为了进行比较,Oracle 文档CREATE SEQUENCE显示了ORDER/NOORDER选项:

ORDER

指定ORDER以保证按请求顺序生成序列号。如果您将序列号用作时间戳,则此子句很有用。对于用于生成主键的序列,保证顺序通常并不重要。

ORDER如果您将 Oracle 数据库与 Real Application Clusters 一起使用,则仅需要保证有序生成。如果使用独占模式,则始终按顺序生成序列号。

NOORDER

指定NOORDER是否不想保证按请求顺序生成序列号。这是默认设置。

Microsoft SQL Server 是否为SEQUENCEs提供了强排序约束?或者微软一般不认为它很重要?

sql-server sql-server-2012 sql-server-2017

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

sys.dm_os_ring_buffers 中的 CPU 使用率不正确

我正在运行带有 SQL Server 实例的云 VPS。因为它是供个人使用的,所以我使用的是 express 版(我不能使用开发者版,因为我在技术上运行了生产应用程序,而且我买不起 Standard+)。

我正在尝试使用Brent Ozar 的教程使用sp_BlitzFirst. 我遇到的问题是,无论当时的实际 CPU 使用情况如何,ProcessUtilizationinsys.dm_os_ring_buffers总是100以 形式出现。

虚拟机信息

@@version: Microsoft SQL Server 2017 (RTM-CU15) (KB4498951) - 14.0.3162.1 (X64) May 15 2019 19:14:30 版权所有 (C) 2017 Microsoft Corporation Express Edition(64 位)Linux (Ubuntu 18.04) .2 LTS)

主机: 1 & 1 Ionos VPS

lscpu 输出

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2
On-line CPU(s) list: 0,1
Thread(s) per …
Run Code Online (Sandbox Code Playgroud)

sql-server ubuntu dmv sp-blitz sql-server-2017

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