Questions tagged «sql-server»

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

3
如何授予对表值函数的权限
我做对了吗...? 我有一个可以退款的功能... CREATE FUNCTION functionName( @a_principal money, @a_from_date datetime, @a_to_date datetime, @a_rate float ) RETURNS money AS BEGIN DECLARE @v_dint money set @v_dint = computation_here set @v_dint = round(@v_dint, 2) RETURN @v_dint END GO Grant execute on functionName to another_user Go 我只是想知道是否可以将其转换为iTVF? 我尝试这样做,但出现错误: CREATE FUNCTION functionName ( @a_principal money, @a_from_date …

4
sys.databases中某些列的排序如何处理?
我正在尝试UNPIVOT在sys.databases2005年至2012年的各个版本的SQL Server中包含的各个列上运行。 在UNPIVOT与以下错误消息失败: 消息8167,第16层,状态1,第48行 列“ CompatibilityLevel”的类型与UNPIVOT列表中指定的其他列的类型冲突。 T-SQL: DECLARE @dbname SYSNAME; SET @dbname = DB_NAME(); SELECT [Database] = unpvt.DatabaseName , [Configuration Item] = unpvt.OptionName , [Configuration Value] = unpvt.OptionValue FROM ( SELECT DatabaseName = name , RecoveryModel = CONVERT(VARCHAR(50), d.recovery_model_desc) , CompatibilityLevel = CONVERT(VARCHAR(50), CASE d.[compatibility_level] WHEN 70 THEN 'SQL Server …

3
禁止SQL Server Management Studio自动完成
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 有没有办法在键入查询时临时禁止SQL Server Management Studio的自动完成?我不想完全禁用自动完成功能,而只是说在输入特定单词时按住某些键,以免妨碍自动完成功能。 例如说我有以下查询 SELECT Foo, Foo2 FROM SomeTable 作为I型Foo,然后打空格键SQL Server Management Studio中的自动完成踢并完成Foo对FooBar。

3
如何以最少的停机时间将rowversion列添加到大型表
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 使用SQL Server 2008和更高版本时,我想将rowversion列添加到大型表中,但是当我只是 ALTER TABLE [Tablename] ADD Rowversion [Rowversion] NOT NULL 然后,该表无法用于更新太长时间。 我可以使用哪些策略来减少停机时间?我会考虑的。当然,越简单越好,但是我会考虑任何策略。 我的想法是,作为最后的选择,我可以维护一个由触发器维护的副本登台表,然后将登台表sp_rename重命名为原始表。但我希望有一些更简单/更轻松的方法。



3
varchar(255)还是varchar(256)?
我应该使用表格varchar(255)还是varchar(256)设计表格?我听说一个字节用于列的长度或存储元数据。 现在重要吗? 我在互联网上看到了一些帖子,但是它们适用于Oracle和MySQL。 我们拥有Microsoft SQL Server 2016企业版,它如何应用于此环境? 现在说,例如,如果我告诉客户保留文本描述为255个字符而不是256个字符,会有什么区别吗?我读到的内容“最大长度为255个字符的DBMS可以选择使用单个字节来指示字段中数据的长度。如果限制为256或更大,则将需要两个字节。” 这是真的?

1
主键带有“ NOT FOR REPLICATION”选项
我最近接手了一个项目,并且发现大多数表中的主键都具有“ NOT FOR REPLICATION” 属性。 我不是DBA,但是在大多数数据库中,没有主键的记录肯定会被视为损坏。这些记录中的大多数的主键几乎肯定会在某处用作外键。 这是以前的开发人员(谁不再为公司工作)的错误,还是涉及其他逻辑?我们甚至不在生产环境中使用复制,因此无论如何这实际上不会影响任何严重的事情,但是我想知道删除我不知道的所有这些指令是否还有其他副作用。 对于与该主题相关的许多搜索字词,我还没有找到很多有用的信息,因此,我可以肯定地说,这只是一个愚蠢的错误,我需要扭转,所以这个问题确实是为了缓解我的偏执狂。

1
如何启用SQL Server 2019的结果集缓存?
SQL Server 2019 CTP 2.3在sys.database中添加了一些新列,包括is_result_set_caching_on: SQL Server 2019的新增功能或ALTER DATABASE页面中尚未记录该文件。 我试着使用与Accelerated Database Recovery相同的语法,只是为了笑: ALTER DATABASE StackOverflow2013 SET RESULT_SET_CACHING ON; 但是没有运气: Msg 5058, Level 16, State 12, Line 8 Option 'RESULT_SET_CACHING' cannot be set in database 'StackOverflow2013'.

5
SQL Server的崩溃恢复能力可以提高吗?
我们有运行SQL Server(2008 SP4和2016 SP1)的PC,这些PC经常断电。显然,这有时会导致SQL Server数据库的(索引)损坏,此后我们需要恢复该损坏。 我知道SQL Server不是为这种情况而设计的,正确的解决方案是解决掉电的原因(如果您感到好奇,请在下面进一步介绍)。但是,SQL Server中是否可以设置任何调优选项以减少断电时数据库损坏的风险? 背景:“ PC”是安装在叉车上的Windows平板电脑。当用户关闭叉车时,平板电脑会断电。我们试图教会用户在关闭叉车之前正确关闭Windows,但是失败了(可能是因为大多数情况下仅将其关闭即可)。我们目前还在研究其他选择,例如添加UPS,以通知平板电脑关闭电源。
20 sql-server  crash 

4
诊断“有时”缓慢查询的建议
我有一个存储过程,该过程通过覆盖索引从索引视图返回结果。通常,它运行速度很快(〜10毫秒),有时甚至可以运行8秒钟。 这是一个随机执行的示例(注意:这不是一个缓慢的执行,但是查询文本与传递的值相同): declare @p2 dbo.IdentityType insert into @p2 values(5710955) insert into @p2 values(5710896) insert into @p2 values(5710678) insert into @p2 values(5710871) insert into @p2 values(5711103) insert into @p2 values(6215197) insert into @p2 values(5710780) exec ListingSearch_ByLocationAndStatus @statusType=1,@locationIds=@p2 这是SPROC: ALTER PROCEDURE [dbo].[ListingSearch_ByLocationAndStatus] @LocationIds IdentityType READONLY, @StatusType TINYINT AS BEGIN SET NOCOUNT ON; …

2
未找到足够好的计划的查询
我有一个SQL Server 2012数据库。我注意到Reason for early termination of statement optimization某些查询的价值,而所有查询都给出Good Enough Plan Found。现在我的问题是: 什么是“提早终止语句优化的原因”的所有可能类型。我确实在msdn中进行了搜索,但没有完整的值列表。 是否有DMV或扩展事件列出了由于找到了“足够好的计划”以外的原因而终止优化的所有查询?我引用了以下两篇文章,其中未列出所有可能性。[此外,它们在我的数据库中给了我不同的结果]。 查找:查询编译超时 识别不够好的查询计划

1
为什么搜索LIKE N'% %'匹配任何Unicode字符而=N' '匹配很多呢?
DECLARE @T TABLE( Col NCHAR(1)); INSERT INTO @T VALUES (N'A'), (N'B'), (N'C'), (N'Ƕ'), (N'Ƿ'), (N'Ǹ'); SELECT * FROM @T WHERE Col LIKE N'%�%' 退货 Col A B C Ƕ Ƿ Ǹ SELECT * FROM @T WHERE Col = N'�' 退货 Col Ƕ Ƿ Ǹ 使用下面的代码生成每个可能的双字节“字符”表明,该=版本与它们中的21,229个以及LIKE N'%�%'所有版本中的匹配(我尝试了一些具有相同结果的非二进制排序规则)。 WITH T(I, N) AS …

2
为什么串联运算符估计的行数少于其输入的行数?
在下面的查询计划摘要中,很明显,该Concatenation运算符的行估计应为~4.3 billion rows,或其两个输入的行估计之和。 但是,~238 million rows会产生一个估计值,从而导致次优Sort/ Stream Aggregate策略,该策略会将数百GB的数据溢出到tempdb。在这种情况下,逻辑上一致的估计将产生Hash Aggregate,消除了溢出,并显着提高了查询性能。 这是SQL Server 2014中的错误吗?在任何合理的情况下,估算值低于输入值可能是合理的?可能有哪些解决方法? 这是完整的查询计划(匿名)。我没有对该服务器的sysadmin访问权限,无法提供来自QUERYTRACEON 2363或类似跟踪标记的输出,但是如果有帮助的话,也许可以从管理员那里获取这些输出。 该数据库的兼容性级别为120,因此正在使用新的SQL Server 2014基数估计器。 每次加载数据时都会手动更新统计信息。给定数据量,我们当前正在使用默认采样率。较高的采样率(或FULLSCAN)可能会产生影响。

1
服务代理已备份,现在可以接收,但似乎没有处理
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 4年前。 事件通知有问题。在将消息发送到的机器/驱动器/数据库上(接收者),当没有人看时,驱动器已装满,因此已被整天备份。 现在我们已经释放了驱动器上的空间,它正在接受消息到队列中,但是它似乎没有在处理它们-没有插入新记录,即使队列现在有2200万条消息并且正在增长(!)。队列已启用: is_activation_enabled = 1 is_receive_enabled = 1 is_enqueue_enabled = 1 我在中看到了激活的SP activation_procedure,但是当我查看时SP_WHOISACTIVE,看不到任何活动的阅读器。 在我再次烧毁驱动器之前-我在做什么错?如何获取它来处理或刷新消息?提前致谢。 更新资料 一个想法-自从有了以来is_enqueue_enabled,也许它可以存储所有消息,直到可以处理所有消息为止?如果是这样,我可以安全地关闭它吗? CREATE PROCEDURE [dbo].[Parse_EN_Messages] AS --mdb 2012/09/05 version 1.2 -- With apologies and thanks to Remus Rusanu, Jonathon Kehayias, Mladen Prajdic, and Jasper Smith for writing -- …

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.