我有以下查询:
WITH preEKBE AS(
SELECT
EKPO . MANDT,
EKPO . EBELN,
EKPO . EBELP,
DD07T.DDTEXT AS c_Meaning,
EKBE . VGABE,
EKBE . DMBTR,
EKBE . MENGE,
COUNT(VGABE) OVER(PARTITION BY EKBE . EBELN, EKBE . EBELP, ZEKKN) AS c_COUNT,
CONVERT (varchar(10),MIN(EKBE . BLDAT) OVER ( PARTITION BY EKBE . EBELN, EKBE . EBELP, EKBE . VGABE),104) AS c_EBKE_BLDAT_First,
CONVERT (varchar(10),MIN(EKBE . BUDAT) OVER ( PARTITION BY EKBE . EBELN, EKBE . EBELP, EKBE . VGABE),104) AS c_EKBE_BUDAT_First,
CONVERT (varchar(10),MAX(EKBE . BLDAT) …Run Code Online (Sandbox Code Playgroud) 我在使用 SQL Server 2014 的功能时在客户端数据库上遇到了一个奇怪的问题。ISNULL()在线搜索使我发现其他人在使用时遇到了相同的错误INSERT。运行简单的时出现以下错误SELECT:
Msg 681, Level 16, State 3, Line 1
Attempting to set a non-NULL-able column's value to NULL.
Run Code Online (Sandbox Code Playgroud)
以下查询会产生该错误:
SELECT
ISNULL( [t2].[date_update], GETDATE() )
FROM
[dbo].[t1]
INNER JOIN
[dbo].[t2] ON [t1].[a] = [t2].[id];
Run Code Online (Sandbox Code Playgroud)
我已经精简了表格以简化说明,但受影响的列定义如下:
CREATE TABLE [dbo].[t1] (
[id] INT NOT NULL PRIMARY KEY,
[a] NVARCHAR(100) NOT NULL
);
CREATE TABLE [dbo].[t2] (
[id] BIGINT NOT NULL PRIMARY KEY,
[date_update] DATETIME NULL
);
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助或见解!
编辑:
在故障排除中,我能够使用以下内容在客户端系统上重现相同的错误消息INSERT:
CREATE TABLE …Run Code Online (Sandbox Code Playgroud) 我正在研究SSRS报告。
我有数据类型的内容Image。我想把它转换成plain-textor XML。是否可以?
我没有提供样本数据,因为有大量数据。(整个报告内容保存为图像以便我们理解)
建议我最好的解决方案。
xml sql-server reporting-services sql-server-2012 sql-server-2014
因此,我正在运行本地主机 SQL Server,并尝试编辑表的前 200 行。然后我收到了这个(原件是德文的,我通过网络找到的):
此后,SSMS 关闭。我研究了一下,发现如果 PATH 变量超过 2K 个符号,这是一个已知问题。我的是1336,所以问题应该出在其他地方。
这是路径变量:
C:\Program Files\Common Files\Microsoft Shared\Windows Live;
C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;
C:\ProgramData\Oracle\Java\javapath;
C:\Program Files (x86)\Intel\iCLS Client\;
C:\Program Files\Intel\iCLS Client\;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
C:\Program Files\Intel\WiFi\bin\;
C:\Program Files\Common Files\Intel\WirelessCommon\;
C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;%systemroot%\System32\WindowsPowerShell\v1.0\;
C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\;
C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\;
C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\;
C:\Program Files\Microsoft SQL …Run Code Online (Sandbox Code Playgroud) VS 2013 中构建的 SSIS 包(v 12.0.31101)
DTSExec 在 SQL Server 2014 上运行
描述:从版本 8 到版本 6 的程序包迁移失败,错误为 0xC001700A“程序包中的版本号无效。版本号不能大于当前版本号。”。
当人们使用 SQL 2012 时,我看到很多关于上述内容的 google 结果,但我使用的是 2014 年,找不到任何支持。版本应该匹配(即都是包版本 8)
select @@version
Run Code Online (Sandbox Code Playgroud)
Microsoft SQL Server 2014 (RTM-CU14) (KB3158271) - 12.0.2569.0 (X64) 2016 年 5 月 27 日 15:06:08 版权所有 (c) Windows NT 6.3 上的 Microsoft Corporation Enterprise Edition(64 位)(内部版本 9600:)
附加信息 - 看起来它正在运行较旧的 DTSExec,可能来自现已删除的 sql 2012 实例。我将如何修复/重新指向 2014?
适用于 64 位的Microsoft (R) SQL Server 执行包实用程序版本11.0.2100.60 版权所有 (C) Microsoft Corporation。版权所有。
我正在使用 FluentMigrator 在 SQL Server 2014 数据库上进行数据库迁移。如果我使用重命名构建器来重命名表,如下所示:
Rename.Table("Old Name").To("NewName");
Run Code Online (Sandbox Code Playgroud)
然后我是否需要删除并重新创建引用表旧名称的任何外键,或者 SQL(或 FM)是否知道更新引用?
我使用 SQL Server 2014 并且我已经运行了这个测试 T/SQL。
BEGIN TRY
BEGIN TRANSACTION T1
CREATE TABLE aa9
(
A int
)
SAVE TRANSACTION S1
INSERT INTO aa9 (A) VALUES ('aa')
COMMIT TRANSACTION T1
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION S1
PRINT 'Error ..... '
;throw
END CATCH
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误:
消息 3931,级别 16,状态 1,第 17 行
当前事务无法提交,也无法回滚到保存点。回滚整个事务。
我应该能够将事务回滚到我的 SavePoint 事务吗?
我需要计算正在运行的存储过程之一的平均持续时间。例如SP的持续时间(以秒为单位)为:1,30,2,5,2,15,35,7,3,4,2,1,2,40
我必须消除前 10% 的调用(快速调用)和后 10% 的调用(慢速调用)并计算其余调用的平均值。
由于必须定期在庞大的数据集上完成此操作,是否有更好的方法可以最大限度地减少性能损失?
我知道的方法是:
使用以下查询消除前 10% 的记录,该查询会产生两个值 (1,1)
SELECT TOP 10 PERCENT WITH TIES value FROM #t order by value asc
Run Code Online (Sandbox Code Playgroud)
底部 10% 给出 (35,40),
SELECT TOP 10 PERCENT WITH TIES value FROM #t order by value desc
Run Code Online (Sandbox Code Playgroud)
消除这些值(1、1、35 和 40)后,平均值将为 7。
我遇到一些查询有时比从服务器返回结果所需的时间长 500 毫秒的情况。准确地说:正常响应时间为 5-6 毫秒,与服务器的 ping 时间相同。SQL 探查器的正常查询持续时间约为 1 毫秒。有时响应时间会上升到500ms左右。从来没有 300 或 400 毫秒,总是非常接近 500 毫秒。SQL Profiler 报告的实际查询持续时间仍然只有 1 毫秒左右。我使用 Wireshark 分析了网络流量,发现当响应时间为 500 毫秒时,我几乎立即收到请求包的 ACK(在 5-6 毫秒 ping 时间内)。这一定意味着服务器快速接收请求并且这不是与网络相关的问题,对吧?
因此,由于某种原因,SQL 服务器收到请求,但在执行查询之前会等待,或者执行 SQL 探查器的“持续时间”中未包含的其他操作。看起来很奇怪,它总是在 500 毫秒左右 - 这会给任何人带来任何关联吗?PS:我也觉得SQL Server这么快发送ACK可能有点奇怪?通常我希望它等待更长的时间,事实上,当响应时间很短时,就不会发送 ACK(只是搭载在响应包上)。
编辑:我正在循环测试这个。大多数响应速度很快,只有一小部分有这种延迟。延误通常是分组的。这是一个生产服务器,我认为它可能与同时发生的其他请求有关,但令我困惑的是为什么它总是有 500 毫秒的延迟,以及为什么它没有包含在分析器的“持续时间”列中。
sql-server-2014 ×10
sql-server ×8
t-sql ×5
sql ×2
percentile ×1
pivot ×1
ssis ×1
ssms ×1
transactions ×1
unpivot ×1
xml ×1