标签: sql-server-2005

有什么原因我不应该将我的数据库所有者设置为 [sa]?

昨天我问了这个关于更改我拥有的多个数据库的 dbo 的问题。这种变化是有道理的,但我想说清楚。

有什么好的理由或情况为什么我不应该将数据库的 dbo 设置为 [sa]?

sql-server-2005 sql-server permissions sql-server-2000

15
推荐指数
1
解决办法
1717
查看次数

快速查看为 SQL Server 分配了多少 RAM?

使用 SQL Server 2005,您可以查看任务管理器,至少可以粗略地查看分配给 SQL Server 的内存量。

在 SQL Server 2008 中,工作集或提交大小从未真正超过 500 MB,即使 SQLServer:Memory Manager/Total Server Memory (KB) perf 计数器指出 16,732,760。

是否有设置可以在任务管理器中实际显示服务器内存?或者是因为他们改变了 SQL Server 中内存的使用方式

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

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

缩小事务日志是否可以在实时数据库上执行?

在Microsoft SQL Server 2005中,缩小在线数据库的日志文件是否可以,否则会导致服务中断?

sql-server-2005 sql-server

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

有必要在非聚集索引中包含聚集索引列吗?

考虑到非聚簇索引是基于聚簇索引的,非聚簇索引是否有必要列出聚簇索引中包含的任何列?

换句话说,如果 Products 表包含 ProductID 上的聚集索引,那么在创建非聚集索引时建议包含 ProductID 列时,是否有必要将其添加为列?

如果没有,是否有将列名添加到非聚集索引的情况?

sql-server-2005 sql-server-2008 nonclustered-index

15
推荐指数
1
解决办法
5081
查看次数

如何从在主键上返回多行的连接中选择第一行

这与这个问题有关: Joining multiple tables results in duplicate rows

我有两个要加入的表。他们共用一个钥匙。person 表的每个主键有一个名称,而 email 表的每个 personId 有多个电子邮件。我只想显示每个人的第一封电子邮件。目前我每人收到多行,因为他们有多封电子邮件。我正在运行 SQL-Server 2005。

编辑:这是 T-SQL。第一封电子邮件实际上是每个人的第一封电子邮件行。

编辑 2:我看到的第一封电子邮件将是在 SQL 通过查询工作时显示在联接中的第一封电子邮件行。我不管出现哪个电子邮件。只是显示不超过一封电子邮件。我希望这能让它更清楚。

Table1: Person
Table2: Email

Select Person.PersonName, Email.Email
From person 
left join on Person.ID=Email.PersonId;
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server greatest-n-per-group

15
推荐指数
4
解决办法
10万
查看次数

SQL 代理 powershell 上下文参考

在我的新工作中,我们在每台服务器上都有多个命名实例。例如

  • 服务器 1\开发
  • Server1\DevIntegrated
  • 服务器 1\QA

我在工作中有一个 SQL PowerShell 脚本,它调用操作系统,调用Foo.exe但需要传递命令行参数(连接字符串)。每个实例上都将存在一个 SQL 代理作业,带有 PowerShell 类型的步骤,需要知道当前上下文是什么。此执行在 DevIntegrated 上开始。

我不想让每个脚本都以...开头

$thisInstance = "Dev"
Run Code Online (Sandbox Code Playgroud)

...特别是因为当我们在接下来的几个月中迁移到环境(新服务器和命名实例)时,我必须对其进行编辑。

如果我启动 SQLPS,我可以通过切片和切块 Get-Location 的结果或运行来确定我的实例

(Invoke-Sqlcmd -Query "SELECT @@servername AS ServerName" -SuppressProviderContextWarning).ServerName
Run Code Online (Sandbox Code Playgroud)

当 SQL 代理启动 PowerShell 类型的作业时,它会在 C:\windows\system32 中启动,并且Get-Location路由不起作用,因为它不在 SQLSERVER 上下文中。我可以切换到该上下文,但我将处于 SQL Server 的“根”,并且不知道我应该在哪个实例中。Invoke-Sqlcmd出于相同的原因,使用该路由也不起作用(从技术上讲,它在那里超时不是默认实例)

据我所知,我已经列举了我可以进入工作日志的所有基本“事情”,但似乎没有任何显示 SQLSERVER:\SQL\Server1\DevIntegrated

Get-Process似乎我可以使用它和一些尝试通过击中实例和匹配 spid 来拼凑东西的巫术,但这听起来像是来自地狱的血腥黑客。一定有一些基本的东西我错过了,有人能解释一下吗?

研究 PowerShell 的替代方案

我曾调查过使用其他工作类型,但没有得到令人满意的解决方案。研究表明,SQL 代理下列出的 PowerShell 是 SQLPS,通过右键单击代理启动它的实例会自动将我放到正确的位置。只有当我将交互式代码粘贴到作业步骤中时,我才知道前面提到的差异。

操作系统的作业类型使我处于相同的状态,因为我找不到确定哪个实例将我放入命令外壳的方法。当然,我可以使用 sqlcmd 并获取 的值,@@servername …

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

14
推荐指数
2
解决办法
2314
查看次数

SQL Server 清单

继我的另一个问题之后,我想开始考虑每天/每周/每月应该在警报方面查看什么。我希望能够在问题发生之前看到问题(这就是计划)......

到目前为止,我已经开始收集以下脚本(无顺序):

日常的

  • 检查系统正常运行时间(以防万一我需要作为 DBA 检查任何内容)
  • 检查上次备份
  • 检查事务日志备份
  • 检查 SQL 作业的状态
  • 检查过去 24 小时(或 1140 分钟)的平均 CPU 使用率

每周

  • 检查 MSDB 备份历史记录
  • 检查上次运行 CheckDB 的时间
  • 检查索引碎片
  • 检查索引统计信息(读取与写入等)
  • 检查 IO 瓶颈

每月

  • 检查缺失的索引
  • 检查不再使用的索引

还有其他建议吗?(我是 DBA 的新手,所以任何帮助/建议总是受欢迎的)

sql-server-2005 sql-server-2008 maintenance

14
推荐指数
1
解决办法
7460
查看次数

为什么查询在存储过程中比在查询窗口中运行得慢?

我有一个复杂的查询,它在查询窗口中运行 2 秒,但作为存储过程运行大约 5 分钟。为什么作为存储过程运行需要这么长时间?

这是我的查询的样子。

它需要一组特定的记录(由@id和标识@createdDate)和特定的时间范围(从 开始的 1 年@startDate),并返回发送的信件的汇总列表以及由于这些信件而收到的估计付款。

CREATE PROCEDURE MyStoredProcedure
    @id int,
    @createdDate varchar(20),
    @startDate varchar(20)

 AS
SET NOCOUNT ON

    -- Get the number of records * .7
    -- Only want to return records containing letters that were sent on 70% or more of the records
    DECLARE @limit int
    SET @limit = IsNull((SELECT Count(*) FROM RecordsTable WITH (NOLOCK) WHERE ForeignKeyId = @id AND Created = @createdDate), 0) * .07

    SELECT DateSent …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2005 stored-procedures query-performance

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

将多行中的列合并为单行

customer_comments由于数据库设计,我将一些拆分为多行,对于报告,我需要将comments每个唯一的数据id合并为一行。我以前尝试过使用SELECT 子句和 COALESCE技巧中的此分隔列表进行一些操作,但我不记得它并且一定没有保存它。在这种情况下,我似乎也无法让它工作,似乎只能在一行上工作。

数据如下所示:

id  row_num  customer_code comments
-----------------------------------
1   1        Dilbert        Hard
1   2        Dilbert        Worker
2   1        Wally          Lazy
Run Code Online (Sandbox Code Playgroud)

我的结果需要如下所示:

id  customer_code comments
------------------------------
1   Dilbert        Hard Worker
2   Wally          Lazy
Run Code Online (Sandbox Code Playgroud)

所以对于每row_num一个实际上只有一行结果;注释应按 的顺序组合row_num。上面链接的SELECT技巧可用于将特定查询的所有值作为一行获取,但我无法弄清楚如何使其作为SELECT将所有这些行吐出的语句的一部分工作。

我的查询必须自己遍历整个表并输出这些行。我没有将它们组合成多列,每一行一个,所以PIVOT似乎不适用。

sql-server-2005 sql-server query

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

带有 IS NULL 和 NOT NULL 的 CASE 语句

有没有更好的方法在 SQL Server 2005 中编写以下行?

CASE
WHEN (ID IS NULL)
   THEN 'YES'
WHEN (ID IS NOT NULL)
   THEN 'NO'
END AS ID_Value,
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server

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