在我的新工作中,我们在每台服务器上都有多个命名实例。例如
我在工作中有一个 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) 我有一个查询,它使用三个查找表来获取我需要的所有信息。我需要有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) 我有一个实际上什么都没有的实例,它只是被安装了(它是为一个项目设计的,但实际上从未在这台服务器上完成,该项目在另一台服务器上重复完成)所以自从我有了这个实例,我想重命名它。
这能做到吗?我该怎么做?
进一步调查(谷歌搜索)说这不太可能。与我的同事的额外咨询说我不妨安装一个 2k8 实例并继续。
我有一个最近变得不可预测的 SQL Server 2005,我正在摸索为什么。在几秒钟内执行的查询正在更改计划并花费几分钟(在全表扫描或索引假脱机中花费时间)。现在第一个也是最明显的事情是,统计数据已经过时导致优化器感到困惑,但我相信事实并非如此 - 首先是因为基础数据没有显着变化(例如,在一年的数据之上添加一天的数据已经在表中),其次是因为自动创建统计和自动更新统计都是真的。然而,优化器越来越困惑;在 Tuning Advisor 中运行 SQL 给了我很多CREATE STATISTICS似乎可以修复它的多列语句(直到 SQL 的下一个错误行为)。
我可以用来解决根本原因的任何策略想法吗?为什么“正常”统计数据还不够?
SQL Server Express Edition(2005 和 2008)是否支持安装、启用和运行 CLR 存储过程和函数。
sql-server-2005 sql-server-2008 sql-server sql-server-express sql-clr
我正在考虑教育一个团队编写更好的 SQL Server 查询,并想知道人们对提高性能的最佳提示是什么。
例如,我曾经有一个 DBA,他坚持认为 count(*) 的性能会比 count(1) 差(我不知道她是否正确,或者它是否仍然适用于最新的查询优化器)。
我应该告诉团队尝试并始终使用或避免哪些简单的事情?理想情况下,我正在寻找 (a) 可能产生合理差异和 (b) 直截了当的事情,1 - 2 行说明。
sql-server-2005 ×10
sql-server ×5
performance ×2
instance ×1
maintenance ×1
powershell ×1
query ×1
sql-clr ×1