标签: sql-server

IntelliSense 不工作,但已启用

这个问题确实被证明是一个棘手的问题(而且很烦人)。

在 SQL Server Management Studio 2008 中,直到几天前,我的 IntelliSense 运行良好。然后突然就停了下来。在工具栏菜单上启用的图标,在工具 -> 选项 -> 文本编辑器 -> T-SQL -> IntelliSense 下,它表示它已在那里启用。

我曾尝试使用 Ctrl-Shft-R 刷新 IntelliSense 缓存,但这也不起作用。

任何想法我的智能感知发生了什么以及我需要做什么才能恢复它?

sql-server-2008 sql-server intellisense

32
推荐指数
5
解决办法
13万
查看次数

当我向它们添加 WHERE 子句时,视图是否被优化?

如果您在视图内部或外部过滤视图会有所不同吗?

例如,这两个查询之间有什么区别吗?

SELECT Id
FROM MyTable
WHERE SomeColumn = 1
Run Code Online (Sandbox Code Playgroud)

或者

SELECT Id
FROM MyView
WHERE SomeColumn = 1
Run Code Online (Sandbox Code Playgroud)

并且MyView定义为

SELECT Id, SomeColumn
FROM MyTable
Run Code Online (Sandbox Code Playgroud)

如果源表位于链接服务器上,答案有什么不同吗?

我问是因为我必须从链接服务器两次查询一个大表(4400 万行),并获得结果的汇总。我想知道是否应该创建两个视图来访问数据,每个查询一个视图,或者我是否可以使用单个视图和一个WHERE子句。

performance sql-server-2005 sql-server view query-performance

32
推荐指数
2
解决办法
3万
查看次数

如何在 SQL Server 中附加数据库?

有关在 SQL Server 中附加数据库的一些常见问题:

  • 附加或分离数据库是什么意思?
  • 如何分离数据库?
  • 如何附加数据库?
    • 附加和重建日志是什么意思?
  • 如何在 SQL Server Express 中执行此操作?
  • 我什么时候可以考虑分离和附加?
  • 是否存在任何风险或警告?
  • 在 SQL Server 的版本和版本之间附加怎么样?(标准到企业?2000 年到 2008 年?2012 年到 2008 年?)

sql-server

32
推荐指数
1
解决办法
7万
查看次数

哪个更有效:从链接服务器中选择还是插入到链接服务器?

假设我必须将数据从一台服务器导出到另一台服务器(通过链接服务器)。哪个语句会更有效率?

在源服务器中执行:

INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table]
SELECT a, b, c, ... FROM [dbo].Udf_GetExportData()
Run Code Online (Sandbox Code Playgroud)

或者在目标服务器中执行:

INSERT INTO [dbo].[Table]
SELECT a, b, c, ...
FROM OPENQUERY([OriginLinkedServer],
    'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()')
Run Code Online (Sandbox Code Playgroud)

哪一个会更快并且总共消耗更少的资源(源服务器和目标服务器)?两台服务器都是 SQL Server 2005。

sql-server-2005 sql-server insert linked-server

32
推荐指数
2
解决办法
6万
查看次数

XML 索引的性能非常奇怪

我的问题基于此:https : //stackoverflow.com/q/35575990/5089204

为了在那里给出答案,我做了以下测试场景。

测试场景

首先我创建一个测试表并用 100.000 行填充它。一个随机数(0 到 1000)应该为每个随机数产生 ~100 行。这个数字被放入一个 varchar col 并作为一个值放入您的 XML。

然后我做一个像 OP 那样的调用,需要它使用 .exist() 和 .nodes() ,第二个有一个小优势,但都需要 5 到 6 秒。事实上,我调用了两次:第二次以交换的顺序和稍微改变的搜索参数和“//item”而不是完整路径来避免通过缓存结果或计划产生误报。

然后我创建一个 XML 索引并执行相同的调用

现在 - 真正让我感到惊讶的是什么!-在.nodes完整路径是比以前(9秒)慢得多,但.exist()下降到半秒,用全路径甚至下降到约0.10秒。(同时.nodes()具有短的路径比较好,但仍远远落后于.exist()

问题:

我自己的测试简而言之:XML 索引可以极大地破坏数据库。它们可以极大地加快速度(s.edit 2),但也可以减慢您的查询速度。我想了解它们是如何工作的...什么时候应该创建一个 XML 索引?为什么.nodes()有索引比没有索引更糟糕?如何避免负面影响?

CREATE TABLE #testTbl(ID INT IDENTITY PRIMARY KEY, SomeData VARCHAR(100),XmlColumn XML);
GO

DECLARE @RndNumber VARCHAR(100)=(SELECT CAST(CAST(RAND()*1000 AS INT) AS VARCHAR(100)));

INSERT INTO #testTbl VALUES('Data_' + …
Run Code Online (Sandbox Code Playgroud)

performance xml sql-server sql-server-2012

32
推荐指数
1
解决办法
4493
查看次数

如何将 SQL Server Unicode / NVARCHAR 字符串设置为表情符号或补充字符?

我想根据其 Unicode 代码点将 Unicode 字符串变量设置为特定字符。

我想使用 65535 以外的代码点,但 SQL Server 2008 R2 数据库的排序规则为SQL_Latin1_General_CP1_CI_AS.

根据Microsoft 的 NCHAR 文档,该NCHAR函数采用如下整数:

整数表达式

当数据库的排序规则不包含补充字符 (SC) 标志时,这是一个从 0 到 65535(0 到 0xFFFF)的正整数。如果指定了超出此范围的值,则返回 NULL。有关补充字符的更多信息,请参阅排序规则和 Unicode 支持。

当数据库的排序规则支持补充字符 (SC) 标志时,这是一个从 0 到 1114111(0 到 0x10FFFF)的正整数。如果指定了超出此范围的值,则返回 NULL。

所以这段代码:

SELECT NCHAR(128512);
Run Code Online (Sandbox Code Playgroud)

NULL在此数据库中返回。

我希望它返回与此相同的:

SELECT N'';
Run Code Online (Sandbox Code Playgroud)

如何在排序规则“不包含补充字符 (SC) 标志”的数据库中使用代码(不使用实际表情符号字符)将 Unicode 字符串变量(例如 nvarchar)设置为表情符号?

表情符号 Unicode 代码点的完整列表

(最终我希望任何角色都能工作。我只是为了便于参考而选择了表情符号。)

(虽然服务器是SQL Server 2008 R2,但我也很好奇以后版本有什么解决方案。)

假设没有办法,我可以在另一个具有适当排序规则的数据库中引用内联用户定义函数吗?

如何找到具有“补充字符”标志的归类?

这在我们的服务器上不返回任何记录:

SELECT * FROM sys.fn_helpcollations() 
WHERE name LIKE 'SQL%[_]SC';
Run Code Online (Sandbox Code Playgroud)

似乎引入了 SQL Server …

sql-server collation t-sql encoding unicode

32
推荐指数
1
解决办法
4万
查看次数

为什么建议将 BLOB 存储在单独的 SQL Server 表中?

这个备受好评的 SO 答案建议将图像放在单独的表中,即使与另一个表只有 1:1 的关系:

如果您决定将图片放入 SQL Server 表中,我强烈建议使用单独的表来存储这些图片——不要将员工照片存储在员工表中——将它们保存在单独的表中。这样,Employee 表可以保持简洁和高效,假设您并不总是需要选择员工照片作为查询的一部分。

为什么?我的印象是SQL Server 只在表中存储一个指向某些专用 BLOB 数据结构的指针,那么为什么要手动创建另一个间接层呢?它真的能显着提高性能吗?如果是,为什么?

sql-server blob

32
推荐指数
3
解决办法
2万
查看次数

32
推荐指数
2
解决办法
3567
查看次数

HEAP 表的有效使用场景是什么?

我目前正在将一些数据导入到遗留系统中,并发现该系统不使用单个聚集索引。一个快速的谷歌搜索向我介绍了 HEAP 表的概念,现在我很好奇在什么使用场景中 HEAP 表应该比集群表更受欢迎?

据我了解,HEAP 表仅对审计表和/或插入发生的频率远高于选择的情况有用。它将节省磁盘空间和磁盘 I/O,因为没有要维护的聚集索引,并且由于非常罕见的读取,额外的碎片不会成为问题。

sql-server clustered-index heap

31
推荐指数
3
解决办法
9337
查看次数

如何分析存储过程

我正在使用 SQL Server 2012 并且想知道如何分析存储过程

例如,探查器可以捕获存储过程中的每个单独的 SQL 语句,它是什么,运行需要多长时间等?

我正在尝试诊断合并复制存储过程,这必须是合并代理完整运行的一部分。似乎不可能抓住有性能问题的存储过程并再次运行它,因为在这一点上它并不慢。

sql-server sql-server-2012

31
推荐指数
2
解决办法
7万
查看次数