Questions tagged «sql-server»

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

3
我什么时候需要备份服务主密钥?
我正在阅读有关透明数据加密的一些文档和白皮书。一些文档还提到了备份服务主密钥(为澄清起见,我不是在谈论数据库主密钥)。我只是不完全理解为什么这样做是必要的,因为我可以使用TDE加密将数据库从服务器A(备份)备份/还原到服务器B(还原)而无需使用任何服务主密钥。 在什么情况下我需要还原服务主密钥?

3
并行统计更新
在SQL Server 2008或更高版本中,是UPDATE STATISTICS WITH FULLSCAN单线程操作还是可以使用并行性?如何使用默认采样更新统计信息-它可以使用并行性吗?我没有看到指定MAXDOP更新统计信息的选项。

2
如何删除还原数据库
我正在使用SQL Server 2008 R2运行日志传送。 我遇到以下情况:辅助数据库驱动器空间不足,没有应用日志传送事务日志。 我要解决的方法是删除辅助数据库并从头开始配置日志传送。 我现在遇到的问题是辅助数据库处于还原状态,无法删除它们。我该如何进行? 例如,如果我尝试使它们脱机,则会收到错误消息, ALTER DATABASE is not permitted while the database is in the Restoring state.

2
如何添加有权访问单个视图的用户?
我正在使用MSSQL Server Management Studio 2008,并且需要向第三方公开其数据协调的视图。我已经创建了适当的视图,但是在创建用户和授予该用户适当的权限以从视图中选择时遇到了麻烦。 我遵循了用于创建登录名和用户的向导,然后在“安全性”部分中添加了我的视图,并选中了“授予”框。一切似乎都很好,但是当我以该用户身份登录并尝试执行“从MyViewName中选择*”时,它告诉我选择权限被拒绝。 我只是重新创建了用户(这次只是使用SQL而不是向导),并明确授予了选择权限,现在它给了我错误:(Msg 916, Level 14, State 1, Line 2 The server principal "username" is not able to access the database "unrelated_db" under the current security context.我不知道为什么它试图访问不相关的数据库...) 我真的不知道从这里去哪里。同样,基本上,我所需要做的就是创建一个我可以提供给第三方的用户,以使他们连接到我们的数据库并从该视图中进行选择。


3
为什么简单的ALTER TABLE命令在带有全文索引的表上花费这么长时间?
我有一个很大的(约6700万行)名称/值表,该值在DataValue列上具有全文本索引。 如果我尝试运行以下命令: ALTER TABLE VisitorData ADD NumericValue bit DEFAULT 0 NOT NULL; 它运行1小时10分钟,但仍无法在VisitorData包含约6700万行的表上完成。 为什么要花这么长时间而没有完成? 我该怎么办? 以下是有关表格的更多详细信息: CREATE TABLE [dbo].[VisitorData]( [VisitorID] [int] NOT NULL, [DataName] [varchar](80) NOT NULL, [DataValue] [nvarchar](3800) NOT NULL, [EncryptedDataValue] [varbinary](max) NULL, [VisitorDataID] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_VisitorData_VisitorDataID] PRIMARY KEY CLUSTERED ( [VisitorDataID] ASC ) WITH (PAD_INDEX …

2
SQL Server VARCHAR列宽
在网上搜索时,我发现在指定超宽VARCHAR列(例如VARCHAR(30)可能会这样做时,例如VARCHAR(255))时是否会对性能产生影响的建议相互冲突。 我始终认为,如果整行超过8060字节,则会对性能造成影响。除此之外,我看到了分歧。 要求是真的The default is SET ANSI PADDING ON = potential for lots of trailing spaces吗?只要总行宽小于8060,在VARCHAR列过大设置时是否存在真正的性能问题? 列宽很重要的证据 The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that you need. http://www.sql-server-performance.com/2007/datatypes/ Length is a constraint on the data (like CHECK, FK, NULL etc) Performance …

5
SQL Server链接服务器性能:为什么远程查询如此昂贵?
我有两个通过链接服务器连接的数据库服务器。两者都是SQL Server 2008R2数据库,并且链接的服务器连接是使用当前登录名的安全上下文通过常规的“ SQL Server”链接建立的。链接的服务器都位于同一数据中心中,因此连接不成问题。 我使用以下查询来检查列的哪些值identifier可远程使用,但不能在本地使用。 SELECT identifier FROM LinkedServer.RemoteDb.schema.[TableName] EXCEPT SELECT DISTINCT identifier FROM LocalDb.schema.[TableName] 在两个表上,列上的都是非聚集索引identifier。本地大约有260万行,远程只有54行。但是,在查看查询计划时,70%的执行时间专用于“执行远程查询”。此外,在研究完整的查询计划时,将使用估计的本地行数1代替2695380(这是仅选择后面的查询时的估计行数EXCEPT)。 当执行此查询时,确实需要很长时间。 这让我感到奇怪:这是为什么?估算是“正确”的吗?还是在链接服务器上进行远程查询真的那么昂贵?


5
使用多个数据库与使用单个数据库的利弊
我正在一个新项目中工作,该项目要求使用7个数据库,并认为更容易实现性能,稳定性和优化。 虽然我不同意,但我在收集好的参数以使用单个数据库时遇到了麻烦(将表拆分为逻辑域)。 到目前为止,我有一个论点是数据完整性(我不能在数据库之间使用外键)。 使用单个或多个数据库有哪些优点/缺点? [到目前为止的总结] 针对多个数据库的参数: 丢失数据完整性(不能在数据库上使用外键) 失去还原完整性 获得复杂性(数据库用户/角色) 小赔率服务器/数据库将关闭 解决方案: 使用架构来分隔域。 POC:使用伪数据证明7/1 db执行计划中的重点

2
为什么插入索引表时无法获得最少的日志记录
我正在测试在不同情况下的最小日志记录插入量,以及从我读过的使用TABLOCK和SQL Server 2016+将具有非聚集索引的INSERT INTO SELECT读取到堆中的最少记录,但是在我这样做的情况下,完整日志记录。我的数据库处于简单恢复模型中,并且在没有索引和TABLOCK的堆上成功获取了最少日志记录的插入。 我正在使用Stack Overflow数据库的旧备份进行测试,并使用以下模式创建了Posts表的副本... CREATE TABLE [dbo].[PostsDestination]( [Id] [int] NOT NULL, [AcceptedAnswerId] [int] NULL, [AnswerCount] [int] NULL, [Body] [nvarchar](max) NOT NULL, [ClosedDate] [datetime] NULL, [CommentCount] [int] NULL, [CommunityOwnedDate] [datetime] NULL, [CreationDate] [datetime] NOT NULL, [FavoriteCount] [int] NULL, [LastActivityDate] [datetime] NOT NULL, [LastEditDate] [datetime] NULL, [LastEditorDisplayName] [nvarchar](40) NULL, …

2
我应该在添加主键之前还是之后添加页面级压缩?
情况 Sql Server 2008 Enterprise上的数据仓库 36+百万行堆(不要问),具有60+列 每月增加750k 未定义主键(我现在已经确定了一个) 无压缩 我正在考虑做的事情(按此顺序) 添加页面级压缩 添加PK 添加许多非聚集索引 尽快这样做 题 最终:我要先添加PK还是页面压缩?(有关系吗?) 如果我先将压缩添加到表,那么任何索引都将继承表级压缩设置吗?dba.stackexchange上的此问题的答案是“否,压缩不继承”。 我目前偏向的目标 -- Add page level compression alter table dbo.TableName rebuild with (data_compression = page) ; go -- Add primary key alter table dbo.TableName add constraint PK_TableName primary key clustered (<Columns>) ; go -- …

3
如何在仅具有IDENTITY列的表中插入?
给定只有IDENTITY列的表,您如何插入新行?我尝试了以下方法: INSERT INTO TABLE (Syntax error) INSERT INTO TABLE VALUES() (Syntax error) INSERT INTO TABLE (Id) VALUES() (Syntax error) 我正在测试某些东西,只需要IDENTITY列。它不是用于生产。否则,这样的表可以用作序列生成器,而无需其他列。


2
为什么CTE应该以分号开头?
我只是在看StackOverflow上的一篇文章,其中Aaron Bertrand建议使用CTE代替数字表,这是一种执行手头任务的优雅方法。我的问题是,为什么CTE的第一行以分号开头? ;WITH n AS (SELECT TOP (10000) n FROM (SELECT n = ROW_NUMBER() OVER (ORDER BY s1.[object_id]) FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2 ) AS x ORDER BY n ) SELECT n FROM n ORDER BY n; -- look ma, no gaps! 这是为了确保WITH语句不会被解析为先前的内容SELECT或其他内容?我在SQL Server 2005 BOL中看不到有关在WITH之前使用分号的任何信息。
14 sql-server  t-sql  cte  syntax 

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.