Questions tagged «sql-server»

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

1
存储过程返回动态创建的表数据
简而言之,我们正在与具有调查系统的外部供应商合作。该系统不一定设计得最好,因为当您创建新调查并创建新表时,即: Tables ____ Library_1 -- table for Survey 1 SurveyId int InstanceId int Q_1 varchar(50) Library_2 -- table for Survey 2 SurveyId int InstanceId int Q_2 int Q_3 int Q_4 varchar(255) 这些表用所生成的SurveyId在名称的末尾(Library_)和问题列与所产生的QuestionId在它(结束Q_)。 为了明确起见,问题存储在单独的表中,因此尽管问题ID是连续的,但对于每个调查来说,问题ID都不从1开始。问题列将基于表中分配给它们的ID。 看起来查询起来非常简单,除了我们需要从所有调查表中提取数据以发送到另一个系统外,这就是问题所在。由于这些表是在前台添加新调查时自动创建的,最终应用程序,其他系统无法处理这种类型的结构。他们需要数据是一致的以便消费。 因此,我的任务是编写一个存储过程,该过程将从所有Survey表中提取数据并将其放置为以下格式: SurveyId InstanceId QNumber Response ________ __________ _______ ________ 1 1 1 great 1 2 1 …

2
索引会消耗内存吗?
我刚刚开始了解SQL Server上的内存使用情况。在问题SQL Server 2008 R2“ Ghost Memory”问题的答案中使用查询时?,我发现单个数据库占用了缓冲池中绝大部分的空间。再看一下,使用sys.allocation_units和sys.indexes,我确认这很可能是由于数据库中索引的大量使用引起的。大多数索引都是群集的。 另一位数据库开发人员认为我们在服务器上遇到内存问题-由于没有可用的内存,查询开始运行很长时间。 我的问题是-使用这些索引及其在缓冲池中的存在是否会占用其他进程可用的内存?

5
T SQL表值函数,以逗号分隔列
我在Microsoft SQL Server 2008中编写了一个表值函数,以数据库中的逗号分隔列为每个值吐出单独的行。 例如:“一,二,三,四”将返回一个只有一个包含以下值的列的新表: one two three four 你们这些代码看起来容易出错吗?当我用 SELECT * FROM utvf_Split('one,two,three,four',',') 它永远运行,永不返回任何东西。尤其是因为MSSQL服务器上没有内置的拆分功能(为什么为什么为什么?!),而我在网络上发现的所有类似功能都是绝对的垃圾,或者与我要执行的操作无关。 这是函数: USE *myDBname* GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR) RETURNS @SplitValues TABLE ( Asset_ID VARCHAR(MAX) NOT NULL ) AS BEGIN DECLARE @FoundIndex INT DECLARE @ReturnValue …

3
使用try / catch进行动态SQL备份命令时如何记录错误详细信息
在使用try catch和动态sql的存储过程中发出备份命令时,与直接运行备份命令相比,错误消息非常普遍。 在SP中尝试/捕获: begin try execute sp_executesql @sql; -- a backup command end try begin catch print ERROR_MESSAGE(); -- save to log, etc. end catch 结果是 50000:usp_Backup:117:BACKUP DATABASE异常终止。 wheareas发出raw命令: backup DATABASE someDb to disk... 结果更好的细节: 查找错误-SQL Server数据库错误:文件“ H:\ FolderName \ Filename.bak:” 112上发生了不可恢复的I / O错误(磁盘上没有足够的空间。)。 有没有办法将这些详细信息捕获到存储过程中的变量中(进行记录,传递回调用方以进行重试逻辑)?似乎详细信息正在通过消息通道传递,但我希望它们在SP中可用。

2
连续处理时索引碎片
SQL Server 2005 我需要能够连续处理900M记录表中的约350M记录。在处理过程中,我用来选择要处理的记录的查询变得非常分散,我需要停止处理以重建索引。伪数据模型和查询... /**************************************/ CREATE TABLE [Table] ( [PrimaryKeyId] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, [ForeignKeyId] [INT] NOT NULL, /* more columns ... */ [DataType] [CHAR](1) NOT NULL, [DataStatus] [DATETIME] NULL, [ProcessDate] [DATETIME] NOT NULL, [ProcessThreadId] VARCHAR (100) NULL ); CREATE NONCLUSTERED INDEX [Idx] ON [Table] ( [DataType], …

3
如何提高MS SQL Server中原始查询的性能?
我有一个ASP.NET网站,它拥有自己的独立数据缓存,并且数据不会长时间更改,因此它不需要使用相同的查询第二次查询SQL Server。我需要提高转到该SQL Server的首次(原始)查询的性能。一些查询处理的数据太多,可能导致SQL Server使用tempdb。我不使用临时表变量或临时表,因此SQL Server决定tempdb在需要时自行使用。 我的数据库大小为16Gb,服务器计算机上有32Gb的物理RAM。 我了解MS SQL Server缓存策略会尝试将数据保留在RAM中,以加快类似查询的性能(如果它们需要再次加载相同的数据)。除此之外,它将尝试使用可用的RAM代替tempdb来提高性能,而不会引起磁盘访问。 我想当需要在tempdb SQL Server中存储一些内容的查询出现并且没有足够的RAM可用时,SQL Server有2个选择: 1)卸载一些缓存的数据并使用备用的RAM代替tempdb以避免磁盘写入 2)保留缓存的数据以备将来查询,并开始使用tempdb,这会导致写入慢速磁盘。 我不知道在这种情况下SQL Server会做出什么选择,但我希望它成为选择#1,因为我只关心首次查询(原始)的性能,因为我再也不会向SQL Server发送相同的查询了。 (尽管我可能会发送类似的查询)。 在这种情况下,SQL Server缓存策略是什么? 在避免针对原始查询的tempdb和第二次查询的速度之间,如何平衡RAM的使用? 是否可以以选择#1的方式配置SQL Server?如果是,那怎么办? 我还能如何提高所有原始SQL查询的性能? 由于我不了解SQL Server缓存策略,因此我想将数据库放在RAM磁盘上。这将确保即使SQL Server始终选择#1,任何原始查询都可以高速加载未缓存的数据。这样做的风险是,如果SQL Server继续选择#2,则可能会开始使用更多具有较少可用RAM的tempdb(在我将16Gb用于RAM磁盘后仅剩下16Gb),这将减慢那些导致溢出的原始查询的速度tempdb。 我对SQL 2008 R2的解决方案感兴趣,但是我想对于SQL 2008,SQL 2005可能是相同的,并且可能是SQL 2000。 说明: 该框上没有其他应用程序在运行,它专用于SQL Server。网站在单独的框中运行。 它是Windows Server 2008 R2 Enterprise 64位上的SQL Server 2008 R2 Standard Edition 64位。 …

3
为什么此完全外部联接不起作用?
我之前曾使用“完全外部联接”来获得所需的结果,但也许我不完全理解该概念,因为我无法完成应该是简单联接的工作。 我有2个表(分别称为t1和t2),每个表有2个字段: 11 Policy_Number Premium 101 15 102 7 103 10 108 25 111 3 t2 Policy_Number Loss 101 5 103 9 107 20 我想做的是从两个表以及Policy_Number中获得保险费和损失总和。我使用的代码是: select sum(premium) Prem_Sum, sum(Loss) Loss_Sum, t1.policynumber from t1 full outer join t2 on t1.policynumber = t2.policynumber group by t1.policynumber 上面的代码将返回正确的总和,但会将“ policy_number”下“ policy_number”不匹配的所有记录分组。 我希望我的结果看起来像这样 Policy_Number Prem_Sum …

1
有关SQL Server基准测试的明确步骤列表?
在为使用SQL Server的应用程序运行性能测试/基准之前,我希望能够将实例设置为“干净”状态,而无需重新启动实例。我倾向于遵循一些步骤,但是我想建立一个确定的列表,该列表的顺序正确,没有多余的步骤。 此步骤列表是否完成将SQL Server设置为“干净”状态? 顺序逻辑/正确吗? 有多余的步骤吗? CHECKPOINT -- Write all dirty pages DBCC DROPCLEANBUFFERS -- All should be clean after checkpoint? DBCC FREEPROCCACHE -- Clear the plan cache DBCC FREESYSTEMCACHE -- Is this necessary after FREEPROCCACHE? DBCC FREESESSIONCACHE -- May not be necessary if distributed queries aren't used, but want …


3
在表中插入数字时,如何保留前导零?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 8年前关闭。 我已将两个记录插入到表中。 create table num(id int) insert into num values(0023) insert into num values(23) select * from num 当我查询它们时,它们都显示为23。这意味着SQL Server忽略前导0。其背后的机制是什么?在插入值时,SQL Server如何返回值(即0023和23)?

2
非聚集索引插入
说我有一张这样的桌子: create table SomeTable ( id int identity(1, 1) not null primary key clustered, SomeString1 varchar(50) not null, SomeString2 varchar(50) not null ) go create nonclustered index IX_SomeString1 on SomeTable(SomeString1) go 如果我要这样做: insert into SomeTable(SomeString1, SomeString2) values('foo', 'bar') go 并且查看实际的执行计划,我只看到一个聚集索引插入。为什么在执行计划中看不到非聚集索引插入?
10 sql-server 


6
SQL Server是否并行执行查询?
SQL Server是否并行执行查询?换句话说,如果我运行一个耗时10秒的繁重查询,并且同时启动另一个耗时10秒的繁重查询,则第二个查询实际上会在10秒后启动,还是它们会同时启动?
10 sql-server 

3
将某些阿拉伯字符视为相同
在阿拉伯语中,我们有ا(alef)和أ(带有hamza的alef)之类的字符。 用户可以互换地编写它们,而我们想互换地进行搜索。SQL Server将它们视为单独的字符。如何使SQL将它们视为相同字符? 我曾想在插入时用ا(alef)替换所有أ(alef用hamza),但是我们有很多阿拉伯语的替代品,而不仅仅是ا(alef)和أ(带有hamza的alef)。 我尝试过Arabic_CI_AS,Arabic_CI_AI但这不能解决问题。 这是重新生成问题的脚本: CREATE TABLE [dbo].[TestTable] ( [ArabicChars] [nvarchar](50) NOT NULL, CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED ( [ArabicChars] ASC ) ) ON [PRIMARY]; INSERT INTO TestTable values (N'احمد'); INSERT INTO TestTable values (N'أحمد'); SELECT * FROM TestTable WHERE ArabicChars like N'ا%'; 结果是: ArabicChars احمد (1 row(s) affected) …


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.