标签: sql-server-2008

我可以阻止 SQL 2008 Server Management Studio 的智能感知自动完成最长的单词吗?

在 SQL 2008 Server Management Studio 中:有没有办法让智能感知不总是选择最长的单词来自动完成?例如,我可能正在尝试输入单词client,它会自动完成clientdetails

sql-server-2008

8
推荐指数
1
解决办法
674
查看次数

有人可以解释 Opendatasource/Openrowset 的魔力吗?

从 excel 文件(或 ms-access DB)中提取信息时,我通常使用以下内容:

SELECT *
 FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
 'Data Source=C:\test.xls;Extended Properties=''EXCEL 12.0;HDR=NO;IMEX=1'' ')...[Sheet1$]
Run Code Online (Sandbox Code Playgroud)

有时它有效。有时不会。

有没有人知道设置这个的指南?

我知道临时文件夹,我知道下载正确的驱动程序,我知道扩展属性,我知道没有打开文件。有时虽然,我仍然得到 -

链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”返回了消息“未指定的错误”。

我昨天遇到了这个问题。我重新启动了我的机器 - 没有用。然后再次重新启动我的实例和 P00f!神奇地它起作用了。

所以这就是我的问题 - 当遇到令人敬畏的“未指定错误”时,您需要检查什么以确保所有星星都符合要求才能正常工作。

sql-server-2008 excel

8
推荐指数
1
解决办法
1216
查看次数

SSMS 中的 SQLCMD 模式和@@variable 扩展

在 SSMS 中使用 SQLCMD 模式时(不是从命令行),有没有办法将当前服务器和实例分配给变量?这不同于分配普通的 TSQL 变量。

问题定义

我想使用 SQLCMD 变量扩展的强大功能来替换部署脚本中特定于环境的值,而不是我已经进入的现有 tsql 字符串构建混搭。除了当前环境的一个例外,使用 SQLCMD 处理部署的进展非常顺利。

--
-- define 2 sqlcmd variables that will be expanded in scripts
--
:setvar dbServer "DEVA2\DEV2"
:setvar dbNotServer @@servername

SELECT
    '$(dbServer)' AS hard_coded_value
,   @@servername AS [servername]
,   '$(dbNotServer)' AS dbNotServer
Run Code Online (Sandbox Code Playgroud)

这会产生以下结果。

hard_coded_value  servername  dbNotServer
DEVA2\DEV2        DEVA2\DEV2  @@servername
Run Code Online (Sandbox Code Playgroud)

肉饼说3分之2 还不错,但我宁愿有 3 分之 3 的解决方案。当该脚本部署到测试服务器时,我不想相信部署人员会编辑脚本。

如果使用 SQLCMD 的唯一解决方案是完全从命令行调用脚本,我可以接受这一点,但我想把它扔在这里,因为我对使用 SQLCMD 不感兴趣。

期望输出

:setvar dbNotServer @@servername
SELECT '$(dbNotServer)' AS worked
Run Code Online (Sandbox Code Playgroud)

结果

worked
DEVA\DEV2
Run Code Online (Sandbox Code Playgroud)

徒劳的追求 …

sql-server-2005 sql-server-2008 sql-server

8
推荐指数
1
解决办法
6969
查看次数

SQL 磁盘设置建议 - TempDB、日志 DB、数据文件放置问题

我们有一个非常活跃的数据库服务器,上面运行着不拘一格的应用程序集合。其中最繁忙的两个是全天进行文档扫描和工作流处理的 Laserfiche 数据库(平均约 2800 批请求/秒)和路由电子邮件的黑莓服务器应用程序。还有大约 25 个其他的小型应用程序数据库。

我们是政府机构,所以我们只获得了单个数据库服务器许可证的预算。

最近,我们获得了一个 SAN 来解决磁盘争用问题。

因此,目前我们在其自己的磁盘(raid 1 镜像对)上运行 TempDB,并且我们已将事务日志和数据文件移至 SAN。事务日志放在一个逻辑位置,数据文件放在另一个位置。从物理上讲,它是同一个阵列,但它是一个由 14 个轴(磁盘)组成的阵列,采用 RAID 1+0 配置。

一个非常强大的 SAN - 事情运行得更好。队列长度减半。

就在今天,我们还获得了另一种选择。如果我们当前在文件服务器上需要它,我们也可以有一个 4 磁盘阵列。我知道通常建议在两个单独的阵列上使用 MDF 和 LDF,但在我们的情况下,唯一的方法是将数据或事务日志从 SAN 移到配置为 Raid 5 的 4 磁盘阵列上。请记住它们是当前位于不同的逻辑卷中,但共享相同的物理阵列。

从臀部拍摄我觉得将 MDF 和 LDF 放在 14 轴 raid 1+0 阵列上可能与将它们与 4 轴 raid 5 阵列上的一个分开一样好。但是,我不会在这里问我是否是磁盘逻辑专家。两个选项都使用基本相同的 15k SAS 磁盘 - 即每个主轴基本上是相同的。

所以,本质上问题是。通过将数据或日志移动到它自己的 4 轴 raid 5 阵列,在配置为 RAID 1+0 的单个 14 轴阵列上的 MDF/LDF 是否会得到任何显着的改善(或根本没有)?

想法?

更新信息:

我还将注意到,当前日志卷上的平均队列长度始终保持在 0.55 左右。Data volume 上的平均队列长度很少超过 0.01(通常为 0.00) …

sql-server-2008 disk-structures san

8
推荐指数
1
解决办法
2401
查看次数

是否有一种简单的方法可以触发单个镜像数据库的自动故障转移?

我在具有自动故障转移配置的高安全性的 sqlserver2008-R2 的单个实例上有 3 个镜像数据库。有没有办法触发仅 1 个数据库的自动故障转移?

我想模拟数据库实际上无法访问的位置,而不仅仅是点击 SSMS 的“故障转移”按钮。我可以停止主节点上的端点,但这会使所有 3 个数据库都无法访问,因为它们使用相同的端点。

如何仅禁用 1 db?

sql-server-2008 mirroring sql-server-2008-r2

8
推荐指数
1
解决办法
1417
查看次数

为什么建议人们不要通过视图更新

在大学期间,我们一直在想不要通过视图更新表,当我进入工作场所时,我们又被告知不要通过视图更新数据库。

在哪里/是否对执行此操作有显着的性能影响?或者这更像是高级开发人员/DBA 告诉初级人员不要这样做的情况,因为他们可能会无意中因不正确的连接而造成严重破坏。

编辑
我使用的是 MSSQL 2000-2008(取决于客户的具体情况)

sql-server-2008 view

8
推荐指数
1
解决办法
4217
查看次数

如果某些数据少于 4000 个字符,nvarchar(max) 如何在数据库中存储数据会很快吗?

我必须开发一个 CMS,它将支持两种语言英语,阿拉伯语。这个 CMS 将是一种文章发布站点。在设计和分析时,我发现有些文章的长度超过 8000 个字符。我的表有一些列

PageID int,
PageTitleEnglish nvarchar(200),
PageTitleArabic nvarchar(200),
PageDescEnglish nvarchar(500),
PageDescArabic nvarchar(500),
PageBodyEnglish nvarchar(max)
PageBodyArabic nvarchar(max)
Run Code Online (Sandbox Code Playgroud)

如果我将 PageBody 保留为nvarchar(4000),那么我限制为 4000 个字符,如果我必须存储阿拉伯语版本,那么我需要 16000 个字节(因为阿拉伯语是 Unicode,比 ASCII 多 3 倍的空间)。

所以我只剩下将PageBody定义为 nVarchar(max) 的选项,从性能的角度来看,这将是不利的。我的实际问题是,如果 PageBody 列中的某些数据少于 4000 个字符,MS SQL Store 会比内联列中的数据或单独在数据库中的数据存储。

我也在谷歌上寻找过这个,但没有找到任何相关的答案以及在这种情况下我如何提高性能。

欢迎对这种多语言 CMS 设计的最佳实践提出任何建议。

我只需要支持两种语言阿拉伯语和英语

sql-server-2008 c#

8
推荐指数
2
解决办法
3229
查看次数

何时向#temp 表添加索引?

在 SSMS 中测试存储过程时,有时会说#someTempTable____________________000000000000005B] (someField)etc上缺少索引

当我像这样将它们添加到 sp 时:

CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[#someTable] ([someField])
GO
Run Code Online (Sandbox Code Playgroud)

我似乎从未看到速度提高。所以,我经常不添加这样的索引。我应该什么时候添加这样的索引?

index sql-server-2008 ssms

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

执行访问另一个 SQL 实例的存储过程

如果这个问题重复了另一个已经问过的问题,我深表歉意。我已经搜索了几个小时,但没有找到适合我的情况。

期望的结果

使用 SQL 身份验证的用户对 Server1(默认实例)上的 Database1 具有执行权限,仅此而已。用户执行一个存储过程,作为其进程的一部分,访问 Server1\Instance2 上的数据库 2。我希望它既安全又简单(两者都很重要)。

更多信息

我的 Windows 凭据可以访问两个实例(位于同一台服务器上)。因此,我可以毫无困难地在我的登录名下执行存储过程。但是,我不想给用户我的访问级别。我还需要使用 SQL 登录,因为用户不在域中。

我想要的是为存储过程提供我对该过程的访问级别。由于我是系统管理员,这将为用户提供该过程所需的一切。如果我让它工作,我可能会为此目的创建一个帐户而不是使用我的帐户,但无论哪种方式都是安全的,因为我控制了存储过程的作用。

我尝试将“WITH EXECUTE AS”语句放在我的存储过程中,但无法获取我的 Windows 登录信息。当我把它放进去时,我会在编译存储过程时得到以下错误:

无法以用户 'domain\jdoe' 身份执行,因为它不存在或您没有权限。

用户在两台服务器上都是系统管理员,就像我说的那样,所以我不确定它还需要什么。

我研究了以下内容:

  • 可信 - 我宁愿不公开我的数据库,这看起来很可怕
  • 链接服务器 - 我不想给予额外的权限。我不相信其他数据库可以访问我的数据库,也不相信我的数据库可以访问所有其他数据库。
  • 证书 - 这看起来复杂而困难。除非我能找到一种非常简单的方法来做到这一点并维护它,否则我不确定是否值得麻烦。
  • 所有权链接 - 再次,可怕。当我的目标是防止安全问题时,这看起来会导致更多的安全问题。
  • 镜像用户 - 我什至在另一个服务器实例上创建了相同的(显然不同的 SID)用户并给它相同的密码。不行。

我觉得我错过了一些明显的东西,但我不确定它是什么。因为我整天都在用头撞墙,所以我可能离得太近了,看不到它。如果这里有人能帮我一把或指出我正确的方向,我将不胜感激。我会说我已经阅读了很多 MSDN 文章(我讨厌他们 - 他们似乎从来没有告诉我我想知道什么)。我真正想要的是一个简单、易于遵循的教程,它会引导我了解如何做到这一点。除此之外,即使是我需要走的方向的一般指示也会有所帮助。

sql-server-2008 sql-server

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

重启一个数据库而不是整个服务器

无论如何要重新启动 SQL Server 中的一个数据库而不是重新启动整个服务器?我的一个数据库有永久回滚的任务。我想在不关闭/打开其他数据库的情况下重新启动它

sql-server-2008 sql-server

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