Questions tagged «sql-server»

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

4
使用同义词避免创建重复表是一个好主意吗?
我们有3个完全相同的数据库副本。所有3个数据库都有一个Users表,并且一个用户将始终在所有3个数据库中使用完全相同的设置。每当我们要添加或编辑用户时,我们都必须更新3个数据库。 Users从数据库2和3中删除该表并将其替换为Synonym指向数据库1的a 是一个更好的主意吗? 这是我能想到的优点/缺点: 优点 易于维护。可以在一个位置而不是3个位置更新用户 用户ID将在数据库之间匹配(这一点很重要,因为很多附加应用程序都基于UserId) 缺点 不要以为这是标准程序,所以可能会造成混淆 用户在数据库之间必须具有相同的设置 (从下面的gbn回答)如果数据库1曾经出现故障,则数据库2和3也将不可用。还存在潜在的问题,即在还原事件中数据不一致 这是我正在考虑的一个选项,用于几个不同的表,这些表包含数据库之间相同的设置,而不仅仅是Users表。我在示例中使用Users是因为它很容易理解。

3
不使用时关闭SQL Server的最佳和最简便的方法是什么?
情况:通常只使用客户端工具连接到其他非本地sql服务器的开发人员工作站。但是,在极少数情况下,拥有完整版本的sql server进行本地开发将是有益的。为了不浪费所有时间运行sql server的系统资源,我想了解最好的“关闭它”方法,同时仍然允许使用客户端工具(management studio等)。
13 sql-server 


5
SQL Server 2008全文索引似乎从未完成
我们的网站具有一个SQL Server 2008 R2 Express Edition数据库,该数据库具有用于我们网站搜索的全文索引。每次在其中一个索引表中添加或更新新记录时,索引过程似乎永远不会完成。 在过去的几周中,我一直在使用此网站上的基本相同的查询来监视状态:http : //www.sqlmonster.com/Uwe/Forum.aspx/sql-server-search/2155/Why-is-this这么长时间的人口 这是我运行查询时看到的(单击以查看完整大小): 索引表中的最新记录永远不会完成,并且不可搜索。即使表中没有太多数据,我也已经等了几天看索引是否完成,但是什么都没有改变。 我能够成功完成索引编制的唯一方法是重建目录或删除并重新创建所有索引。 每次这样做,一旦添加了第一个新记录,就会再次出现相同的问题。 以下是服务器统计信息,以防万一: 四核AMD Opteron 2.34GHz 4GB RAM Windows Server 2008 R2企业SP1 x64 具有高级服务x64的SQL Server 2008 R2 Express Edition

1
优化BLOB数据的BCP性能
我正在计划将2TB数据库实时迁移到分区表的过程。从广义上讲,该系统是一个文档存储,其中大部分空间分配给了50kb至500kb之间的LOB,其中很小的一部分位于500kb至1MB范围内。迁移的一部分将涉及从旧数据库到新数据库的BCPing数据。 BCP是首选方法,因为数据的当前/历史划分允许在最终切换之前分阶段(在较安静的时段)提取较旧的数据,从而将对实时系统的影响降至最低。数据量和存储的可用性排除了对分区方案进行原位重建的麻烦。 我怀疑由于BLOB内容的原因,尝试KILOBYTES_PER_BATCH而不是ROWS_PER_BATCH可能会带来一些性能提升。BCP文档中建议SQL可以基于该值优化操作。 我找不到关于这些优化的性质或从哪里开始测试的任何指导。在缺乏建议的情况下,我将尝试从4/8/16/32 / 64mb边界开始进行短期运行。 更改数据包大小可能会带来一些好处(BCP-一个参数,而不是服务器级别设置),但除非有人采用更规范的方法,否则我倾向于将此值提高到最大值65535。


2
修剪大型SQL Server数据库
我有一个大型SQL Server 2008测试数据库(1.9TB),我想减小其在磁盘上的大小。我一直在删除未使用的表,并清除大量数据,但是磁盘上的大小却没有减少。我该怎么办? 我已经看过SSMS中的收缩任务,但是选择令人困惑。我要收缩数据库或文件吗?有什么选择?
13 sql-server 

4
用于远程数据库的SQL Server Management Studio
使用远程托管的专用服务器上的SQL Sever数据库,我可以使用安装在同一服务器或本地计算机上的SQL Server Management Studio。在第一种情况下,我应该使用远程桌面工作,这会使工作变慢一些。在第二种情况下,我需要在服务器的防火墙中打开其他端口,但是我将获得更舒适的用户体验。 这两个的推荐做法是什么?
13 sql-server  ssms 


4
SQL Server 2005/8查询优化提示
我正在教育一个团队编写更好的SQL Server查询,并且想知道人们对提高性能的最佳提示是什么。 例如,我曾经有一个DBA坚持认为count(*)的性能会比count(1)差(我不知道她是对的还是对最新的查询优化器仍然有效)。 我应该告诉团队尝试哪些简单的事情,并始终使用或避免使用?理想情况下,我正在寻找能够(a)产生合理影响且(b)直截了当的陈述(1-2条陈述)的事物。

3
隐藏从T-SQL选择输出
我正在尝试获取查询执行时间,但我也想隐藏查询输出。我只想要经过的时间-没有输出。 例 DECLARE @Start datetime DECLARE @End datetime SELECT @StartTimeWA=GETDATE() SELECT [id] ,[database_id] ,[proc_name] ,[exec_t] from [DB].[dbo].[STAT] SELECT @End=GETDATE() SELECT DATEDIFF(MS,@Start,@End) AS [Duration] 此刻,我得到查询输出,而我的持续时间却是最短的,这是我想要的唯一结果。我一直无法做到这一点,想知道是否还有其他人遇到过类似的问题?这是我想在T-SQL中执行的操作,而不是Management Studio或类似的操作。 我正在尝试监视运行select语句并向服务器报告的时间。我有一个外部监视器服务器,它将每分钟运行一次,并获取时间(花费的时间),我将随时间使用它来趋势/基线。由于当前查询吐出了选择的结果,并且我的持续时间使它歪斜了,所以我的监控服务器感到困惑。我只想要工期列。我还将对插入内容执行此操作,这将很简单,因为它不需要执行选择。 我试图纯粹在T-SQL中执行此操作。我不想使用DMV,因为我想获取运行查询时所花费的时间(快照),并检查当服务器经历各种负载级别时,时间是否随时间而变化,因为这会给我一个好主意关于查询执行时间是否改变。
13 sql-server  t-sql 


1
启动SQL Server 2017服务时出错。错误代码3417
我的计算机上安装了SQL Server 2017。这是SELECT @@VERSION返回的内容: Microsoft SQL Server 2017(RTM-GDR)(KB4293803)-14.0.2002.14(X64)2018年7月21日版权所有(C)2017 Windows 10 Enterprise 10.0(内部版本17134)上的Microsoft Corporation Enterprise Edition(64位): )` 到昨天为止,一切都很好。突然SQL SERVER Service没跑。当我想手动运行该服务时,显示3417 error。当我检查事件日志时,看到此错误: 数据库'master'的脚本级别升级失败,因为升级步骤'msdb110_upgrade.sql'遇到错误200,状态7,严重性25。这是一个严重的错误情况,可能会干扰常规操作,并且数据库将脱机。如果错误是在“ master”数据库升级期间发生的,它将阻止整个SQL Server实例启动。检查以前的错误日志条目中是否有错误,采取适当的纠正措施,然后重新启动数据库,以便脚本升级步骤运行完成。 经过一番谷歌搜索后,我发现可以使用它/T902 switch并尝试解决问题。但是没有解决方案对我有用。因此,我安装了另一个相同实例SQL SERVER 2017并还原了数据库。现在,新安装的实例具有相同的问题。 可能是什么问题呢? 更新 这是SQL Server的完整错误日志。 2018-09-17 13:06:47.29 spid6s配置选项“显示高级选项”从1更改为1。运行RECONFIGURE语句进行安装。 2018-09-17 13:06:47.29 spid6s配置选项“显示高级选项”从1更改为1。运行RECONFIGURE语句进行安装。 2018-09-17 13:06:47.29 spid6s配置选项'Agent XPs'从1更改为1。运行RECONFIGURE语句进行安装。 2018-09-17 13:06:47.29 spid6s配置选项'Agent XPs'从1更改为1。运行RECONFIGURE语句进行安装。 2018-09-17 13:06:47.29 spid6s创建SSIS文件夹... 2018-09-17 13:06:47.30 …

2
了解varchar(max)8000列以及为什么我可以在其中存储超过8000个字符
通过此 Microsoft文档,+ n定义字符串长度,可以是1到8,000之间的值。max表示最大存储大小为2 ^ 31-1字节(2 GB)。存储大小是输入数据的实际长度+ 2个字节。 请帮助我理解这一点。 varchar的最大字符似乎是8000,这远远少于2GB数据的价值。 我看到varchar(max)特定表的此列中有len(mycolumn)> 100 000的记录。因此,我知道我可以8000在varchar(max)列中获得比字符更多的记录。 问题1:8000角色是如何发挥作用的,我应该从哪里知道呢? 问题2:.net数据读取器对此列的查询是否总是返回包含100000+个字符的完整结果?

2
在SQL中使用替换
我有一张桌子,我需要更新一些名称,但我想知道 以下查询: 两者都会一样吗? 查询1 Update mytable Set Name = Replace(Name,'Jeff','Joe') 查询2 Update mytable Set Name = 'Joe' where Name = 'Jeff'
13 sql-server 

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.