SQL Server 实例是可访问的,而且似乎没问题。
Microsoft SQL Server 2016 (SP1-CU2) (KB4013106) - 13.0.4422.0 (X64)
2017 年 3 月 6 日 14:18:16 版权所有 (c) Microsoft Corporation Enterprise Edition(64 位),Windows Server 2012 R2 Standard 6.3(Build 9600) :)(管理程序)
但是白色问号是什么意思?
当我刷新时,这些图标不会消失。我是 sql server 内部的 sysadmin,外部我是那个盒子的管理员。
我注意到的另一件事,你可以在下面的图片中看到。这是 2 个不同的 Management Studio 会话。
在最上面,我以我自己的身份登录DBA and sysadmin,在第二个我使用 Management Studiorun as a different user并使用我用于复制的域帐户,它不是sysadmin.
第二个blue icon在这台服务器和其他服务器中也有,而我的是普通的绿色服务器。
我们在虚拟 Windows 2008 R2 服务器上运行 SQL Server 2008 R2 (10.50.1600)。在将 CPU 从 1 核升级到 4 核并将 RAM 从 4 GB 升级到 10 GB 后,我们注意到性能更差。
我看到的一些观察:
有没有人遇到过这个问题?
根据 sp_BlitzErik,我跑了
EXEC dbo.sp_BlitzFirst @SinceStartup = 1;
Run Code Online (Sandbox Code Playgroud)
给我这些结果。
我注意到在运行 SQL Server 2016 SP1 CU6 的服务器上,扩展事件会话有时会显示导致写入的 SELECT 查询。例如:
执行计划没有显示写入的明显原因,例如可能溢出到 TempDB 的哈希表、假脱机或排序:
对 MAX 类型的变量分配或自动统计更新也可能导致这种情况,但在这种情况下都不是写入的原因。
写的东西还来自什么?
如果我在 SQL Server(2005 或 2008)中使用带点的数据库名称,例如“MyApp.Sales”,这会导致任何问题吗?
首先要做的事情是:我将 MS SQL Server 2008 与兼容级别为 80 的数据库一起使用,并使用 .Net 的System.Data.SqlClient.SqlConnection.
出于性能原因,我创建了一个索引视图。因此,视图中引用的表的更新需要使用ARITHABORT ON. 但是,探查器显示 SqlClient 正在连接ARITHABORT OFF,因此对这些表的更新失败。
是否有使 SqlClient 使用的中央配置设置ARITHABORT ON?我能找到的最好方法是在每次打开连接时手动执行该操作,但是更新现有代码库以执行此操作将是一项相当大的任务,因此我很想找到更好的方法。
sql-server-2008 sql-server ado.net configuration compatibility-level
正如标题所暗示的,我需要一些帮助来获得 T-SQL 的运行总数。问题是我需要做的总和是计数的总和:
sum(count (distinct (customers)))
Run Code Online (Sandbox Code Playgroud)
假设我单独进行计数,结果将是:
Day | CountCustomers
----------------------
5/1 | 1
5/2 | 0
5/3 | 5
Run Code Online (Sandbox Code Playgroud)
我需要输出总和为:
Day | RunningTotalCustomers
----------------------
5/1 | 1
5/2 | 1
5/3 | 6
Run Code Online (Sandbox Code Playgroud)
在使用该coalesce方法之前,我已经完成了运行总计,但从未进行过计数。我现在不知道该怎么做。
我不擅长 SQL,但我有一个数据库要维护。
几乎没有地方留给它了,所以我决定删除所有数据,比如说 2008 年。在执行删除查询(清理了大约 10 000 000 行)和清理事务日志后,我发现我的操作对数据库大小没有影响。还有什么我需要做的吗?
好的,所以我有一份报告进行了本周与上周的比较,我们的客户注意到他们的数据是“时髦的”。经过进一步调查,我们发现它没有按照 ISO 标准正确运行数周。我将此脚本作为测试用例运行。
SET DATEFIRST 1
SELECT DATEPART(WEEK, '3/26/13')
, DATEPART(WEEK, '3/27/12')
, DATEPART(WEEK, '3/20/12')
, DATEPART(WEEK, '1/2/12')
SELECT DATEPART(ISO_WEEK, '3/26/13')
, DATEPART(ISO_WEEK, '3/27/12')
, DATEPART(ISO_WEEK, '3/20/12')
, DATEPART(ISO_WEEK, '1/2/12')
Run Code Online (Sandbox Code Playgroud)
运行时我得到了这些结果。

我认为这很奇怪,所以我做了更多的挖掘,发现 SQL Server 将 1 月 1 日计算为一年的第一周,而 ISO 将 1 月的第一个星期日计算为一年的第一周。
这个问题最终有两个方面。问题1 这是为什么?问题 2 有什么方法可以改变这一点,这样我就不必修改我的所有代码以ISO_Week在任何地方使用?
一位客户报告说他们在 SQL Server 2012 上运行,我们在最终交付之前交付了一些测试查询以进行测试,但是:
“CONCAT”不是可识别的内置函数名称。
我知道这CONCAT()是 SQL Server 2012 中引入的一个新的内置函数,这一切都很好,但是我被要求回滚我的更改以使这个 2008R2 兼容,打着“执行查询的用户可能不具有要执行的 Transact-SQL 权限。” 所以我只是证明我的观点,客户端很可能在 DEV 中安装的 SQL Server 版本与在 PROD 中安装的版本不同。
我找不到任何关于专门拒绝SELECT/EXECUTE内置标量值函数的权限的信息,但是否有可能,如果是这样,用户是否仍会收到相同的错误文本?
[更新:此问题描述了SQL Server 2019 累积更新 5 中已修复的错误。]
考虑以下重现示例(fiddle):
CREATE FUNCTION dbo.Repro (@myYear int)
RETURNS datetime
AS
BEGIN
IF @myYear <> 1990
BEGIN
RETURN NULL
END
DECLARE @firstOfYear datetime;
SET @firstOfYear = DATEFROMPARTS(@myYear, 1, 1);
IF DATEDIFF(day, @firstOfYear, @firstOfYear) <> 0
BEGIN
RETURN NULL
END
RETURN @firstOfYear
END
SELECT dbo.Repro(0);
Run Code Online (Sandbox Code Playgroud)
显然,如果输入是 ,该函数应该返回 1990 年 1 月的第一天1990,NULL否则返回。是的,我知道这DATEDIFF(day, @firstOfYear, @firstOfYear) <> 0是一个荒谬的操作。这是一个演示潜在错误的mcve,而不是生产代码。
现在让我们SELECT dbo.Repro(0)在 SQL Server 2017 和 SQL Server …