Questions tagged «sql-server»

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

4
如何将前1亿个正整数转换为字符串?
这与实际问题有些牵连。如果提供上下文帮助,则生成此数据可能对处理字符串的性能测试方式,生成需要在游标中对其应用某些操作的字符串或生成敏感数据的唯一匿名名称替换有用。我只是对在SQL Server中生成数据的有效方式感兴趣,请不要问为什么我需要生成此数据。 我将尝试从一个正式的定义开始。如果字符串仅由A-Z的大写字母组成,则包含在该系列中。该系列的第一项是“ A”。该系列由所有有效字符串组成,这些字符串按长度优先,然后按典型字母顺序排列。如果字符串在名为的列的表中STRING_COL,则该顺序可以在T-SQL中定义为ORDER BY LEN(STRING_COL) ASC, STRING_COL ASC。 为了给出一个不太正式的定义,请查看excel中按字母顺序排列的列标题。该系列是相同的模式。考虑如何将整数转换为以26为底的数字: 1-> A,2-> B,3-> C,...,25-> Y,26-> Z,27-> AA,28-> AB,... 这个类比不是很完美,因为“ A”的行为不同于以10为底的0。下表列出了一些选定的值,希望可以使其更加清楚: ╔════════════╦════════╗ ║ ROW_NUMBER ║ STRING ║ ╠════════════╬════════╣ ║ 1 ║ A ║ ║ 2 ║ B ║ ║ 25 ║ Y ║ ║ 26 ║ Z ║ ║ 27 ║ …

1
“和”与“&”之间的区别
我试图了解逻辑运算的优先顺序,并具有以下代码: declare @T bit ='TRUE' declare @F bit ='False' print @T and @F 它返回错误为 关键字“和”附近的语法不正确。 我用“&”替换了“ and”,并且代码再次起作用。以前的代码为什么不起作用?我正在使用SQL Server。
13 sql-server  t-sql 


1
是什么允许SQL Server用对象名称交换传递给系统过程的字符串
是什么导致将对象名称传递给系统存储过程合法sp_helptext呢? 什么机制将对象名称转换为字符串? 例如 -- works sp_helptext myproc sp_helptext [myproc] sp_helptext [dbo.myproc] -- and behaves the same as a string sp_helptext 'myproc' sp_helptext 'dbo.myproc' -- does not work sp_helptext dbo.myproc -- Msg 102, Level 15, State 1, Line 1 incorrect syntax near '.' -- an additional case that does not work. …

1
对SQL Server 2016中包含SUBSTRING()的谓词的估计值的更改吗?
是否有任何有关SQL Server 2016更改的文档或研究,以了解如何估计包含SUBSTRING()或其他字符串函数的谓词的基数? 我要问的原因是我正在查看一个在兼容模式130下性能下降的查询,原因与与包含调用SUBSTRING()的WHERE子句匹配的行数估计值的更改有关。我已通过查询重写纠正了此问题,但我想知道是否有人知道SQL Server 2016中有关此区域更改的任何文档。 演示代码如下。在此测试用例中,估计值非常接近,但准确性取决于数据。 在测试用例中,在兼容级别120中,SQL Server似乎正在使用直方图进行估计,而在兼容级别130中,SQL Server似乎假定表中有固定的10%匹配。 CREATE DATABASE MyStringTestDB; GO USE MyStringTestDB; GO DROP TABLE IF EXISTS dbo.StringTest; CREATE TABLE dbo.StringTest ( [TheString] varchar(15) ); GO INSERT INTO dbo.StringTest VALUES ( 'Y5_CLV' ); INSERT INTO dbo.StringTest VALUES ( 'Y5_EG3' ); INSERT INTO dbo.StringTest VALUES ( 'ZY_NE' …

4
表中的NULL值自我比较
我总是对某些神秘的t-sql行为感到困惑,如下所示 -- Create table t and insert values. use tempdb CREATE TABLE dbo.t (a INT NULL); -- insert 3 values INSERT INTO dbo.t values (NULL),(0),(1); GO set ansi_nulls off -- purposely turn off, so we can allow NULL comparison, such as null = null go -- expect 3 rows returned …


7
有人知道这个工具叫什么吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 3年前关闭。 在我们尝试弄清楚Microsoft SQL Server 2012 Internals(2013,0735658560)封面上的红色内容是什么时,生产性工作已停止。我们认为这是某种外科手术或电动工具? 有什么想法吗?
13 sql-server 

3
SQL Server的8 KB数据页未使用512字节
我已经创建了下表: CREATE TABLE dbo.TestStructure ( id INT NOT NULL, filler1 CHAR(36) NOT NULL, filler2 CHAR(216) NOT NULL ); 然后创建一个聚集索引: CREATE CLUSTERED INDEX idx_cl_id ON dbo.TestStructure(id); 接下来,我为它填充30行,每个行的大小为256字节(基于表声明): DECLARE @i AS int = 0; WHILE @i < 30 BEGIN SET @i = @i + 1; INSERT INTO dbo.TestStructure (id, filler1, filler2) VALUES …

2
SELECT TOP 1会损害查询性能;有没有dba可访问的方法来克服这个问题?
在生产应用程序(C#与SQL Server 2014 Standard对话)中,下面是一个查询,如下所示。大多数情况下,它以毫秒为单位运行。但是有时(对于的某些值@Id)会变得很疯狂,并且需要一分钟左右的时间。这比应用程序超时时间长,因此该应用程序对用户而言将失败。 在“疯狂”的情况下,返回的结果集正确地为空,就像在许多但并非所有其他情况下一样。 幸运的是,这在生产和开发环境中都是可重现的。 开发人员说,从查询中删除“ TOP 1”,然后确保应用消耗了结果集的多余行,从而清除了性能问题。 查询计划程序建议不存在索引TOP 1。(在dev中)。 正在进行更改查询和修复应用程序。推出需要一段时间。 我的问题:在采用新查询的应用程序更改推出之前,是否有任何DBA可访问的方法来调整或调整生产SQL Server实例以克服此问题? SELECT TOP 1 subscription_id FROM subscription AS sub JOIN billing_info AS bi ON bi.billing_info_id = sub.billing_info_id JOIN person_group AS apg ON apg.person_id = bi.person_id JOIN pplan ON pplan.plan_id = sub.plan_id JOIN product ON product.product_id = [plan].product_id …

5
在SQL Server中,有一种方法可以确定传递给正在执行的存储过程的参数的值
确定执行存储过程的一种方法是使用“动态管理”方法,如下所示: SELECT sqlText.Text, req.* FROM sys.dm_exec_requests req OUTER APPLY sys.dm_exec_sql_text(req.sql_handle) AS sqltext 但是,这仅显示存储过程的create语句的文本。例如: CREATE PROCEDURE IMaProcedure @id int AS SELECT * FROM AllTheThings Where id = @id 理想情况下,我想查看正在运行的过程的参数是什么,从而导致该过程对于特定的有问题的参数集运行了这么长时间。 有没有办法做到这一点?(在此问题中, Aaron Bertrand提到了DBCC InputBuffer,但我认为这不适用于此问题。)

1
删除语句中未使用的聚集索引
我有一个SQL Server表定义如下 CREATE TABLE [dbo].[Production_Detail] ( [Id] [bigint] NOT NULL DEFAULT (NEXT VALUE FOR [dbo].[Production_Detail_Seq]), [Meta_Data_ID] INT NOT NULL , [Production_Detail_Time] DATETIME NOT NULL, [Production_Detail_Time_Local] DATETIME NOT NULL, [Production_Detail_Value] FLOAT NULL, [IntegratedDM] BIT NOT NULL DEFAULT 0, [DailyIntegratedDM] BIT NOT NULL DEFAULT 0, [InsertedDate] DateTime NOT NULL, [ModifiedDate] DateTime NOT …

2
使用来自组的先前填充日期的数据值填写缺少的日期
绘制在部门之间转移的服务台票证。我们想知道开票当天每一天的部门是什么。该表包含每个票证在其打开的每一天的最后一个部门,该部门发生更改(包括最初打开票证的日期和关闭票证的日期的行)。数据表如下所示: CREATE TABLE TicketAssigment ( TicketId INT NOT NULL, AssignedDate DATE NOT NULL, DepartmentId INT NOT NULL); 我需要的是使用每个DateId的前一个TicketAssigment行中的DepartmentId填写每个TicketId的所有缺失日期。 如果我有这样的TicketAssigment行: 1, '1/1/2016', 123 -- Opened 1, '1,4,2016', 456 -- Transferred and closed 2, '1/1/2016', 25 -- Opened 2, '1/2/2016', 52 -- Transferred 2, '1/4/2016', 25 -- Transferred and closed 我想要这个输出: 1, …

3
DMV sys.dm_exec_requests中的total_elapsed_time是否完全不正确?
我正在运行SQL Server 2012,并尝试将一些查询放在一起以使用DMV进行监视。但是,当查看DMV 中的total_elapsed_time字段时sys.dm_exec_requests,数字看起来相去甚远。这是一个例子: SELECT session_id, RunTime = CURRENT_TIMESTAMP, start_time, total_elapsed_time FROM sys.dm_exec_requests WHERE session_id = 284; session_id RunTime start_time total_elapsed_time 284 2016-04-07 16:14:03.690 2016-04-07 16:08:14.587 1419976 根据我的计算*,经过时间应该在349,103左右,而不是1,419,976。相差四分之一。 *根据当前时间与start_time之间的差(以毫秒为单位),即 SELECT DATEDIFF(MILLISECOND, '2016-04-07T16:08:14.587', '2016-04-07T16:14:03.690'); 这是服务器信息: SELECT @@VERSION; Microsoft SQL Server 2012 - 11.0.5592.0 (X64) Apr 17 2015 15:18:46 Copyright (c) Microsoft …

2
是否存在确定多个文件文件组中包含分配单元的确切文件的方法?
我希望能够详细了解哪些数据库文件包含用于数据库中各种HoBT(对齐和不对齐)的分配单元。 在我们开始为每个文件组创建多个数据文件之前,我一直使用的查询(请参见下文)对我很有帮助,而我只能弄清楚如何获得与文件组级别一样的粒度。 select SchemaName = sh.name, TableName = t.name, IndexName = i.name, PartitionNumber = p.partition_number, IndexID = i.index_id, IndexDataspaceID = i.data_space_id, AllocUnitDataspaceID = au.data_space_id, PartitionRows = p.rows from sys.allocation_units au join sys.partitions p on au.container_id = p.partition_id join sys.indexes i on i.object_id = p.object_id and i.index_id = p.index_id join sys.tables …

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.