使用 SQL Server 2005,您可以查看任务管理器,至少可以粗略地查看分配给 SQL Server 的内存量。
在 SQL Server 2008 中,工作集或提交大小从未真正超过 500 MB,即使 SQLServer:Memory Manager/Total Server Memory (KB) perf 计数器指出 16,732,760。
是否有设置可以在任务管理器中实际显示服务器内存?或者是因为他们改变了 SQL Server 中内存的使用方式
在Microsoft SQL Server 2005中,缩小在线数据库的日志文件是否可以,否则会导致服务中断?
考虑到非聚簇索引是基于聚簇索引的,非聚簇索引是否有必要列出聚簇索引中包含的任何列?
换句话说,如果 Products 表包含 ProductID 上的聚集索引,那么在创建非聚集索引时建议包含 ProductID 列时,是否有必要将其添加为列?
如果没有,是否有将列名添加到非聚集索引的情况?
这与这个问题有关: 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 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-ChildItemGet-HostGet-LocationGet-ProcessGet-PSDriveGet-PSProviderGet-ServiceGet-TraceSourceGet-VariableGet-Process似乎我可以使用它和一些尝试通过击中实例和匹配 spid 来拼凑东西的巫术,但这听起来像是来自地狱的血腥黑客。一定有一些基本的东西我错过了,有人能解释一下吗?
我曾调查过使用其他工作类型,但没有得到令人满意的解决方案。研究表明,SQL 代理下列出的 PowerShell 是 SQLPS,通过右键单击代理启动它的实例会自动将我放到正确的位置。只有当我将交互式代码粘贴到作业步骤中时,我才知道前面提到的差异。
操作系统的作业类型使我处于相同的状态,因为我找不到确定哪个实例将我放入命令外壳的方法。当然,我可以使用 sqlcmd 并获取 的值,@@servername …
继我的另一个问题之后,我想开始考虑每天/每周/每月应该在警报方面查看什么。我希望能够在问题发生之前看到问题(这就是计划)......
到目前为止,我已经开始收集以下脚本(无顺序):
日常的
每周
每月
还有其他建议吗?(我是 DBA 的新手,所以任何帮助/建议总是受欢迎的)
我有一个复杂的查询,它在查询窗口中运行 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
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 中编写以下行?
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 ×10
sql-server ×7
maintenance ×1
memory ×1
performance ×1
permissions ×1
powershell ×1
query ×1