Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

1
从GUI客户端连接到本地MS SQL Server
我对SQL和数据库服务器非常陌生。我最近一直在使用SQL Server Express,并在Windows上使用SQL Server Management Studio访问数据库。我现在正在尝试在Linux机器上实现类似的设置。 我想在计算机上创建一个本地SQL Server实例,然后将SQLectron用作查询我的数据库的GUI客户端。我正在使用Manjaro Linux,因此从AUR安装我的软件包。 到目前为止,我已经安装了mssql-server,mssql-tools并且sqlectron-gui。我已经运行了该sudo /opt/mssql/bin/mssql-conf setup命令,以便(我相信)设置本地服务器。这样做之后,运行命令systemctl status mssql-server将返回以下内容: [kev @ XPS-Manjaro〜] $ systemctl状态mssql-server ●mssql-server.service-Microsoft SQL Server数据库引擎 已加载:已加载(/usr/lib/systemd/system/mssql-server.service;已启用;供应商预设:已禁用) 活跃:活跃于(跑步)自星期三2017-08-23 13:43:49 IST; 2h 42min前 文件:https://docs.microsoft.com/en-us/sql/linux 主PID:9130(sqlservr) 任务:165 CGroup:/system.slice/mssql-server.service ├─9130/ opt / mssql / bin / sqlservr └─9144/ opt / mssql / bin / sqlservr 8月23日13:43:52 XPS-Manjaro …

1
SQLServer升级顾问2014挂起
我尝试对SQL Server 2008服务器运行SQL Server Upgrade Advisor 2014。 连接到2008服务器时,一切看起来都很好,我可以选择要分析的数据库。 但是一旦启动,它将永远运行,无需进行任何操作(停留在分析规则步骤:0/112)。 发生了什么事,我该如何解决? SQL Server 2008和2014均为Express版本,均安装在我的笔记本电脑上。不幸的是,这是我发现运行升级顾问的唯一方法(存在太多限制,无法在实际的pro / dev数据库上运行它)。 在SQL 2008实例是SP3的需要。 Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) 当Advisor冻结时,我们可以看到4个休眠查询(没有活动查询): SELECT name, cmptlevel FROM …

4
为什么在单个数据库中混合列排序规则被认为是不好的?
有两个原因促使我问这个问题: tSQLt当存在具有非默认归类的列时 ,T-SQL测试框架tSQLt认为它是“高严重性”问题。测试的作者指出以下内容: 我不建议每个字符串列都应具有与数据库默认排序规则匹配的排序规则。相反,我建议,如果有所不同,应该有充分的理由。 但是,如上所述,失败测试的严重性被认为是很高的。 Octopus Deploy 在配置Octopus Deploy Server时,在OctopusServer-instance初始化期间,安装失败并出现致命错误。与错误消息相关的文章没有解释为什么这样做是必需的,而只是指出,从(包括)Octopus 3.8版开始,它将成为将来部署的要求。 作为附带说明,RedGate的CI工具包DLM自动化套件支持具有多种排序规则的部署,而不会产生任何抱怨。 对我而言,将所有列排序规则保留为数据库默认值的建议似乎更像是准则或最佳实践。为什么有些人将其视为如此严重的错误?

3
我们的生产SQL Server上的主要性能问题,该如何解决?
此问题基本上是该问题的后续问题: SQL Server 2016的奇怪性能问题 现在,我们使用此系统提高了生产率。尽管自上次发布以来,另一个应用程序数据库已添加到此SQL Server。 这些是系统统计信息: 128 GB RAM(SQL Server最大110GB内存) 4核心@ 2.6 GHz 10 GBit网络连接 所有存储均基于SSD 程序文件,日志文件,数据库文件和tempdb位于服务器的单独分区上 Windows Server 2012 R2 VMware版本HPE-ESXi-6.0.0-Update3-iso-600.9.7.0.17 VMware Tools版本10.0.9,内部版本3917699 Microsoft SQL Server 2016(SP1)(KB3182545)-13.0.4001.0(X64)2016年10月28日18:17:30版权所有(c)Windows Server 2012 R2 Standard 6.3(Build 9600 :)上的Microsoft Corporation标准版(64位) (主管) 我们的系统现在存在主要的性能问题。很高的CPU使用率和线程数: 活动监视器的等待统计信息(我知道这不是很可靠) sp_blitzfirst的结果: sp_configure的结果: 进阶伺服器设定(只有德文才可使用) 我更改了MAXDOP设置。 我知道这可能不是SQL Server本身的问题。可能是虚拟化(vmware),与网络相关(我已经测试过)或应用程序本身的问题。我只是想进一步确定它。 高ASYNC_NETWORK_IO是否会导致sqlserver进程的线程数增加?我以为它会激怒许多工作人员,因为无法关闭线程。那正确吗? 我将提供您需要的任何其他信息。预先感谢您的支持! 编辑: 的结果 …

1
SQL规范是否要求EXISTS()中的GROUP BY
Microsoft当前允许使用此语法。 SELECT * FROM ( VALUES (1) ) AS g(x) WHERE EXISTS ( SELECT * FROM ( VALUES (1),(1) ) AS t(x) WHERE g.x = t.x HAVING count(*) > 1 ); 请注意,GROUP BY该EXISTS子句中没有有效的ANSI SQL。还是仅公开实现细节。 作为参考,PostgreSQL不允许使用相同的语法。 错误:“ tx”列必须出现在GROUP BY子句中或在聚合函数中使用 但是允许使用此语法。 SELECT * FROM ( VALUES (1) ) AS g(x) WHERE EXISTS …

1
SQL Server查询计划XML:QueryPlanHash长度
更新:这绝对是一个错误。有关详细信息,请参见此连接项。 在测试对sp_BlitzCache的一些更改(完整披露,我是作者之一)时,我遇到了我认为是代码中的错误的地方。 一方面,我们要匹配查询计划哈希以获取查询成本。我们这样做是这样的: statement.value('sum(/p:StmtSimple[xs:hexBinary(substring(@QueryHash, 3)) = xs:hexBinary(sql:column("b.QueryHash"))]/@StatementSubTreeCost)', 'float') 据我所知,这已经奏效了。但是,在一种奇怪的情况下,XML中的子字符串引发了一个NULL值,尽管成本很高,但该计划的成本却显示为0。 深入研究执行计划(全面披露,我在负责Paste The Plan的公司工作),我注意到一个问题哈希的“查询计划哈希”长为17个字符,其余为18个字符。以下示例: QueryPlanHash =“ 0x4410B0CA640CDA89” QueryPlanHash =“ 0x2262FEA4CE645569” QueryPlanHash =“ 0xED4F225CC0E97E5” –问题! QueryPlanHash =“ 0xBF878EEE6DB955EA” QueryPlanHash =“ 0x263B53BC8C14A452” QueryPlanHash =“ 0x89F5F146CF4B476F” QueryPlanHash =“ 0xEF47EA40805C8961” QueryPlanHash =“ 0xB7BE27D6E43677A5” QueryPlanHash =“ 0x815C54EC43A6A6E9” 查询计划哈希上市为BINARY 8-想必这应该是相同的长度,但到底是什么像我这样的人了解二进制值? 稍微玩一下XQuery,我发现通过将子字符串更改为从第二个位置开始,它会得出一个有效的(尽管不正确)哈希值。 WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p) SELECT QueryPlanCost = …

1
“存在(…)或存在(…)”中子句的顺序
我有一类查询,用于测试两件事之一的存在。它的形式 SELECT CASE WHEN EXISTS (SELECT 1 FROM ...) OR EXISTS (SELECT 1 FROM ...) THEN 1 ELSE 0 END; 实际语句是用C生成的,并通过ODBC连接作为临时查询执行。 最近发现,在大多数情况下,第二个SELECT可能会比第一个SELECT更快,并且切换两个EXISTS子句的顺序会导致至少在我们刚创建的一个滥用测试用例中实现了急剧的加速。 显而易见的事情是继续进行两个子句的切换,但是我想看看是否有更熟悉SQL Server的人愿意考虑这一点。感觉就像我在依靠巧合和“实现细节”。 (如果SQL Server更聪明,它似乎将并行执行两个EXISTS子句,并让其中一个先完成另一个短路。) 有没有更好的方法来使SQL Server持续改善此类查询的运行时间? 更新资料 感谢您的时间和对我的问题的关注。我本来不会对实际的查询计划有任何疑问,但是我愿意与他们分享。 这是用于支持SQL Server 2008R2及更高版本的软件组件。数据的形状可以根据配置和用途而有很大不同。我的同事考虑对查询进行此更改,因为(在示例中)dbf_1162761$z$rv$1257927703表中的行数总是大于或等于dbf_1162761$z$dd$1257927703表中的行数-有时要多得多(数量级)。 这是我提到的虐待案件。第一个查询是慢速查询,大约需要20秒。第二个查询立即完成。 对于它的价值,最近还添加了“ OPTIMIZE FOR UNKNOWN”位,因为参数嗅探会浪费某些情况。 原始查询: SELECT CASE WHEN EXISTS (SELECT 1 FROM zumero.dbf_1162761$z$rv$1257927703 rv INNER JOIN …
11 sql-server 

2
SQL Server tempdb在RAM磁盘上?
我们的供应商应用程序数据库非常占用TempDB。 该服务器是具有40个内核和768GB RAM的虚拟服务器(VMWare),运行SQL 2012 Enterprise SP3。 包括TempDB在内的所有数据库都位于SAN的1层SSD上。我们有10个tempdb数据文件,每个文件已预先增长到1GB,并且它们从未自动增长。与70GB日志文件相同。跟踪标志1117和1118已设置。 sys.dm_io_virtual_file_stats显示过去一个月在tempdb数据和日志文件上读取/写入的数据超过50 TB,累积io_stall为250小时或10天。 在过去的两年中,我们已经调整了供应商的代码和SP。 现在,我们正在考虑将tempdb文件放置在RAM驱动器上,因为我们有大量的内存。由于tempdb在重新引导服务器时被破坏/重新创建,因此它是放置在易失性内存中的理想选择,该易失性内存在重新引导服务器时也会被清除。 我已经在较低的环境中对此进行了测试,它可以缩短查询时间,但可以增加CPU使用率,因为CPU可以做更多的工作,而不是等待慢的tempdb驱动器。 还有其他人将tempdb放在高oltp生产系统的RAM上吗?有什么主要的不利条件吗?是否有任何供应商专门选择或避免?

2
为什么嵌套循环联接仅支持左联接?
在Craig Freedman的博客Nested Loops Join中,他解释了为什么嵌套循环联接不能支持正确的外部联接: 问题在于,我们多次扫描内部表–对外部联接的每一行扫描一次。在这些多次扫描中,我们可能多次遇到相同的内部行。在什么时候我们可以得出结论,特定的内部行尚未或将不会加入? 有人可以用一种非常简单且具有教育意义的方式来解释这一点吗? 这是否意味着循环从外部表(R1)开始并扫描内部表(R2)? 我了解,对于R1不与相连的值,R2应将其替换为,NULL这样结果集将变为(NULL, R2)。对我来说,似乎无法返回不加入R2时返回值R1,因为它不知道R2要返回哪个值。但这不是它的解释方式。还是? SQL Server会在事实上优化(经常替换)RIGHT JOIN用LEFT JOIN,但问题是解释为什么它在技术上是不可能的NESTED LOOPS JOIN使用/支持RIGHT JOIN逻辑。

2
如何将HTML代码读取为XML并获得类似sql中示例的输出?
我将HTML代码存储在数据库中,我想将其读取为XML。 我的代码: http://rextester.com/RMEHO89992 这是我拥有的HTML代码的示例: <div> <section> <h4> <span> A </span> </h4> <ul> <li> <span> Ab</span> AD <span> AC </span> </li> <li> <span> Ag</span> <span> AL </span> </li> </ul> <h4> <span> B </span> </h4> <ul> <li> <span> Bb</span> BD <span> BC </span> </li> <li> <span> Bg</span> <span> BL </span> </li> </ul> …
11 sql-server  t-sql  xml 

2
将动态SQL(数据透视查询)转换为xml输出时,为什么日期的第一位转换为unicode?
我使用的是来自Bluefeet的出色示例/dba//a/25818/113298,以创建数据透视并将其转换为xml数据。 声明参数 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); 接下来是具有大量代码的CTE,将CTE的结果放入临时DB(与示例中相同) SELECT B.[StayDate] -- this is a date dd-mm-yyyy , B.[Guid] INTO #tempDates FROM BaseSelection B 生成col(与示例相同) SELECT @cols = STUFF((SELECT distinct ',' +QUOTENAME(convert(char(10), [StayDate] , 120)) FROM #tempDates FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,''); 结果集是我应该期望的 set @query = 'SELECT …
11 sql-server  xml  pivot 

2
SQL Server-NTEXT列和字符串处理
我有一张桌子,有一NTEXT列叫comments。我有第二个字符串,我们称它为anothercomment(a varchar),需要comments在单词后面的给定字符串中放置它UPDATEHERE。 强制转换为nvarchar(max)截断comments字符串,所以我不能使用CHARINDEX()(Msg 8152, Level 16, State 10, Line 2 String or binary data would be truncated.)。的datalength()类似符号。我曾经检查过是否有几千个大于8000个字符的列。 我要实现的示例(尽管字符串更长): 评论 - This is a test UPDATEHERE This is the end of the test 另一个评论- . This is inserted. 结果字符串- This is a test UPDATEHERE. This is inserted. This is the end …

3
是否可以根据SQL Server版本选择RAISERROR或THROW?
现在是我的代码: BEGIN TRY INSERT INTO TABLE (F1,F2,F3) VALUES ('1','2','3') END TRY BEGIN CATCH ;THROW END CATCH 除非它在装有SQL 2008的计算机上运行,​​否则效果很好。我想让CATCH块对SQL版本进行检查,如果THROW等于或高于2012,则运行THROW,如果它等于或高于2012,则运行RAISERROR。语法错误,我想知道是否有可能。即使像这样简单的事情也对我不起作用。 BEGIN CATCH IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW END CATCH 任何建议表示赞赏。

1
检查约束以强制执行###。###。####模式匹配
我希望有一个检查约束,可以对多部分代码强制执行此正则表达式模式: ^\d{3}\.\d{3}\.\d{4}$ ...三个数字,一个句号,三个数字,一个句号,四个数字 我是否需要创建CLR函数来实施模式匹配,并且可以在DDL中引用CLR函数吗? 有没有一种方法可以使用另一种方式来实施模式LIKE?

4
可以参与SET操作的最大局部变量数是多少?
我有一个包含业务逻辑的存储过程。在它里面,我有大约1609个变量(不要问我为什么,这就是引擎的工作原理)。我尝试将SET一个变量转换为所有其他变量的串联值。结果是在创建过程中出现错误: 消息8631,级别17,状态1,过程XXX,行YYY内部错误:已达到服务器堆栈限制。请在查询中寻找潜在的深层嵌套,并尝试简化它。 我发现该错误是由于我需要在SET操作中使用的变量数量引起的。我可以将作业一分为二来执行。 我的问题是这方面有限制吗?我检查了一下,但是没有找到。 我们检查了此KB中描述的错误,但这不是我们的情况。我们CASE在代码内不使用任何表达式。我们使用该临时变量准备必须使用CLR函数替换的值的列表。我们将SQL Server更新为SP3 CU6(最新),但是仍然遇到该错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.