Questions tagged «sql-server»

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



1
有关SQL Server中varchar大小调整的当前最佳实践是什么?
从存储和性能的角度来看,我试图了解确定varchar列应为多少的最佳方法。 表现 从我的研究看来只有真正需要时才应使用varchar(max);也就是说,如果该列必须容纳8000个以上的字符,那么一个原因就是缺乏索引(尽管一般而言,我对varchar字段的索引有些怀疑。尽管我对DB原理还很陌生,所以也许这是没有根据的)和压缩(更多有关存储的问题)。实际上,一般而言,当执行varchar(n).... oversizing不好时,人们似乎只建议使用所需的内容,因为查询必须考虑最大可能的大小。但也有人指出,引擎将使用指示大小的一半作为数据的平均实际大小的估计值。这意味着应该从数据中确定平均大小是多少,将其加倍,并将其用作n。但是,对于变异性非常低但非零的数据,这意味着要比最大尺寸大2倍,这似乎很多,但也许不是吗?见识将不胜感激。 存储 在阅读了行内存储与行外存储的工作原理并记住实际存储仅限于实际数据之后,在我看来,实际上,n的选择对存储几乎没有影响(除了确保它足够大以容纳所有东西)。即使使用varchar(max)也不会对存储产生任何影响。相反,如果可能的话,目标可能是将每个数据行的实际大小限制为〜8000字节。那是对事物的准确阅读吗? 上下文 我们的某些客户数据有些波动,因此,我们通常将列的宽度设置为稍稍超出其宽度(例如,将这些列增加15-20%)。我想知道是否还有其他特殊考虑?例如,与我一起工作的某人告诉我使用2 ^ n-1的大小(尽管我发现没有证据表明这是事实....) 我说的是初始表的创建。客户将告诉我们,他们将开始向我们发送一个新表,并发送示例数据(或仅发送第一个生产数据集),我们将对其进行查看并最终创建一个表来保存数据。我们希望使这张表最终能够处理将来的进口以及样品中的进口商品。但是,某些行注定会变长,因此我们填充它们。 问题是多少,是否有技术准则?

3
创建表时如何添加默认约束?SQL Server [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 3年前关闭。 我正在尝试创建一个新表,其中包含各列及其后的约束,如下所示。 Create tblTest( columns.. .. .. Gender int, Constraint DF_tblTest_Gender Default 3 For Gender, .. .. .. ) 但是,我在默认约束附近收到一条错误消息,因为, 'for'附近的语法不正确

4
列出作业,计划和下一个计划的运行日期时间
列出作业,计划和下一个计划的运行日期时间 我正在尝试列出作业,计划和下一个计划的运行日期时间。但是,我似乎没有成功。 sysjobactivity 有next_scheduled_run_date,这是我需要的,但是我不知道将其连接到Job和Schedule。 如果还有其他方法sysjobactivity,请引导我到那里。 SELECT sj.name AS jobName , ss.name AS scheduleName , sja.next_scheduled_run_date FROM msdb.dbo.sysjobs sj INNER JOIN msdb.dbo.sysjobactivity sja ON sja.job_id = sj.job_id INNER JOIN msdb.dbo.sysjobschedules sjs ON sjs.job_id = sja.job_id INNER JOIN msdb.dbo.sysschedules ss ON ss.schedule_id = sjs.schedule_id WHERE (sj.name LIKE 'xray%') AND (sja.next_scheduled_run_date > GETDATE())

3
将逗号作为小数点分隔符的字符串数值转换为NUMERIC(10,2)
我有一个varchar列的SQL表,其中包含希腊格式的数字(。作为千位分隔符,而逗号作为十进制分隔符) 经典转换 CONVERT(numeric(10,2),REPLACE([value],',','.')) 不起作用,因为。(千位分隔符)杀死转换 例如尝试 CONVERT(numeric(10,2),REPLACE('7.000,45',',','.')) 我想将这些值转换为数字(10,2) 关于如何处理的任何建议?

1
SQL Server错误“缺少序列号2的族”
我正在尝试还原服务器上的本地数据库,但是备份出现问题。我做了一个文件.bak,但是每次尝试将其加载到服务器上时,它都不允许我这样做。 这是我收到的错误消息的屏幕截图: 我读到可以RESTORE LABELONLY用来还原文件,但仍然无法正常工作,每次运行该文件时,我都会得到以下信息: 无法打开备份设备'C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.JOSEMA \ MSSQL \ Backu \ INNOVA-T.bak'。操作系统错误3(未能为此错误检索文本。原因:15105)。消息3013,级别16,状态1,第1行 RESTORE LABELONLY正在异常终止。 任何帮助都会很棒。谢谢。

1
要复制的LOB数据(2135980)的长度超过配置的最大值65536
我收到复制错误“要复制的LOB数据长度(2135980)超过配置的最大65536”。 以前曾使用sp_configure将其设置为最大值(-1),并且对sys.configurations的查询确认正在使用最大值(-1)。 EXEC sp_configure 'max text repl size', -1 ; RECONFIGURE; GO select * from sys.configurations where name like 'max text repl size%'; GO 我尝试对“最大文本复制大小”使用较大的值,而不是对最大值进行设置,然后将其关闭然后再打开,都无济于事。 还有其他事情可能会覆盖“最大文本替换大小”设置,或者我可以看到的其他任何地方?

2
为什么tempdb的io_stall_writes_ms这么高?
我们将用户和系统数据文件放在同一磁盘驱动器上。用户文件的(io_stall_write_ms /(1.0 + num_of_writes))低于2,但是tempdb文件通常超过400。而不是常规的数据库数据文件。 SELECT DISTINCT UPPER(LEFT(mf.physical_name, 1)) AS Directory, ( io_stall_write_ms / ( 1.0 + num_of_writes ) ) as result, io_stall_write_ms, num_of_writes, fs.database_id, fs.[file_id] FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id AND fs.[file_id] = mf.[file_id] 谢谢,


4
网络备份的替代方法
在我们的环境中,有些服务器位于“始终在线”可用性组中,有些则是独立的。 我们通常备份到网络共享,但是最近我们观察到,随着数据库的增大,花费的时间越来越长,这会使整个网络变慢。 Ola hallengren的脚本被用于压缩,并且还分割备份文件。我仅执行每日“完整”备份。备份将转到网络共享EMC isilon驱动器。 我从不满意EMC DD Boost。唯一的选择是执行本地备份,然后复制到相同的网络共享。 除了上述以外,还有其他有效的方法吗?

1
什么是SQL的“难提词”?
什么是SQL的“无提词”? 我正在阅读sys.query_store_query_text(Transact-SQL),看到了以下内容,因此我在Google {SQL“ unmentionable”一词}上进行了搜索 has_restricted_text 位 查询文本包含密码或其他不易提及的单词。 其他3个链接将我带回到找到它的位置,我找不到任何看起来与密码相关的内容或SQL可能关心的任何内容。


1
如何在组织中“自我审核”所有SQL Server许可证?
因此,我已经开始了一个不错的非营利组织的新工作,该组织已经存在了几十年。它们具有各种SQL Server版本和版本(例如:2005 Express到2016 SP2 Enterprise)以及许多Windows VM(版本从2003到2016)。 以前的DBA并未完成有关公司拥有的许可证数量或版本的任何文档。实际上没有有用的记录。 我已经运行MAP工具包来收集有关SQL Server的详细信息。因此,至少我有一个关于什么服务器存在的起点,并且已经挖掘了哪些服务器仍在提供生产数据。 我还使用了新的ApexSQL Discover工具,结果却好坏参半(对不起,我喜欢您的东西,但是当我需要添加1台服务器时,我迫不及待需要3天的时间才能运行该工具)。还有dbatools find-dbainstance(不是使用PS导出大量数据的忠实拥护者)。因此,通过将所有这些放在一起,我现在可以确定地发现了该域上存在的大多数或所有实例。 当然,我已经以多种方式查询了许可,并彻底检查了完全无用的极其有用的MS SQL许可指南,该指南似乎没有提供有关组织拥有的许可证或如何获得许可证的任何信息。 问题的症结:其中一些许可证是十年(或两年)前购买的。有些肯定是纸质发票。还记得我提到这是非营利组织吗?从好的方面来说,许可很便宜。另一方面,许可价格便宜,因此大多数或所有许可都没有SA,因为购买新许可更便宜。编辑:这是当时不购买SA的理由,我没有参与。 我是否应该仅假设由于极有可能没有SA-服务器也可能已获得适当的许可-并根据需要购买新服务器?这似乎是一种可怕的方法。 我的问题: 在不尝试挖掘2004年以来的纸质发票的情况下,我怎么知道我的新公司所拥有的SQL Server许可证是什么?我以前从未遇到过这种情况。我是接受审核或支付合作伙伴审核费用的唯一选择吗?(如果是这样,微软,你在做什么???)。 dba.se可以在此处提供的任何见解都可能会增加我的生活。谢谢大家!

1
ALTER TABLE…DROP COLUMN真的是仅元数据操作吗?
我发现了一些表明ALTER TABLE ... DROP COLUMN是仅用于元数据的操作的源。 资源 怎么会这样?是否不需要从基础非聚集索引和聚集索引/堆中清除DROP COLUMN期间的数据? 此外,为什么Microsoft Docs暗示它是完全记录的操作? 对表所做的修改将被记录并且可以完全恢复。影响大表中所有行的更改(例如删除列或在某些版本的SQL Server上添加具有默认值的NOT NULL列)可能需要很长时间才能完成并生成许多日志记录。与影响许多行的任何INSERT,UPDATE或DELETE语句一样小心地运行这些ALTER TABLE语句。 作为第二个问题:如果未从基础页面中删除数据,引擎将如何跟踪丢失的列?

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.