标签: sql-server-2005

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万
查看次数

SELECT DISTINCT 在一列上,同时返回其他列?

我有一个查询,它使用三个查找表来获取我需要的所有信息。我需要有DISTINCT一列的值,但是我还需要与之相关的其余数据。

我的 SQL 代码:

SELECT acss_lookup.ID AS acss_lookupID,
   acss_lookup.product_lookupID AS acssproduct_lookupID,
   acss_lookup.region_lookupID AS acssregion_lookupID,
   acss_lookup.document_lookupID AS acssdocument_lookupID,
   product.ID AS product_ID,
   product.parent_productID AS productparent_product_ID,
   product.label AS product_label,
   product.displayheading AS product_displayheading,
   product.displayorder AS product_displayorder,
   product.display AS product_display,
   product.ignorenewupdate AS product_ignorenewupdate,
   product.directlink AS product_directlink,
   product.directlinkURL AS product_directlinkURL,
   product.shortdescription AS product_shortdescription,
   product.logo AS product_logo,
   product.thumbnail AS product_thumbnail,
   product.content AS product_content,
   product.pdf AS product_pdf,
   product.language_lookupID AS product_language_lookupID,
   document.ID AS document_ID,
   document.shortdescription AS document_shortdescription,
   document.language_lookupID AS document_language_lookupID,
   document.document_note AS document_document_note,
   document.displayheading AS document_displayheading
FROM …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005

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

如何在不安装新实例的情况下更改 MS SQL 2005 中的实例名称?

我有一个实际上什么都没有的实例,它只是被安装了(它是为一个项目设计的,但实际上从未在这台服务器上完成,该项目在另一台服务器上重复完成)所以自从我有了这个实例,我想重命名它。

这能做到吗?我该怎么做?


进一步调查(谷歌搜索)说这不太可能。与我的同事的额外咨询说我不妨安装一个 2k8 实例并继续。

sql-server-2005 instance

13
推荐指数
1
解决办法
6953
查看次数

SQL Server 性能突然下降

我有一个最近变得不可预测的 SQL Server 2005,我正在摸索为什么。在几秒钟内执行的查询正在更改计划并花费几分钟(在全表扫描或索引假脱机中花费时间)。现在第一个也是最明显的事情是,统计数据已经过时导致优化器感到困惑,但我相信事实并非如此 - 首先是因为基础数据没有显着变化(例如,在一年的数据之上添加一天的数据已经在表中),其次是因为自动创建统计和自动更新统计都是真的。然而,优化越来越困惑;在 Tuning Advisor 中运行 SQL 给了我很多CREATE STATISTICS似乎可以修复它的多列语句(直到 SQL 的下一个错误行为)。

我可以用来解决根本原因的任何策略想法吗?为什么“正常”统计数据还不够?

performance sql-server-2005

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

SQL Server Express Edition 是否支持 CLR 过程?

SQL Server Express Edition(2005 和 2008)是否支持安装、启用和运行 CLR 存储过程和函数。

sql-server-2005 sql-server-2008 sql-server sql-server-express sql-clr

13
推荐指数
1
解决办法
5852
查看次数

SQL Server 2005/8 查询优化提示

我正在考虑教育一个团队编写更好的 SQL Server 查询,并想知道人们对提高性能的最佳提示是什么。

例如,我曾经有一个 DBA,他坚持认为 count(*) 的性能会比 count(1) 差(我不知道她是否正确,或者它是否仍然适用于最新的查询优化器)。

我应该告诉团队尝试并始终使用或避免哪些简单的事情?理想情况下,我正在寻找 (a) 可能产生合理差异和 (b) 直截了当的事情,1 - 2 行说明。

sql-server-2005 sql-server

13
推荐指数
1
解决办法
248
查看次数