我们最近在 Windows Server 2012(从 Windows Server 2008 R2)上升级到 SQL Server 2012(从 SQL Server 2008 R2),并且之前运行没有错误的 SQL Server 作业代理作业现在失败了。
该作业有一个 Powershell 作业步骤:
$ErrorActionPreference = 'Stop'
$DateStamp = Get-Date -format "yyyyMMdd"
$BizUnit = 'SHB'
# Target File directory
$BaseDir = '\\MyFileServer\MyDirectory'
$Query = "EXEC dbo.usp_MyQuery '$BizUnit'"
$TargetFile = "MyTargetFile_" + $BizUnit + "_$DateStamp.xml"
$TargetDir = (Join-Path -Path $BaseDir -ChildPath $BizUnit)
$Query | Out-File -FilePath (Join-Path -Path $TargetDir -ChildPath $TargetFile) -Force -Encoding "utf8"
Run Code Online (Sandbox Code Playgroud)
当作业运行时,它失败并显示以下错误消息:
作业步骤在 PowerShell 脚本的第 14 行收到错误。对应的行是 '$Query | Out-File -FilePath …
我们最近在我们的一个存储过程中发现,通过从这里更改查询的连接语法/样式,我们获得了显着的性能改进......
SELECT b.bla, c.foo, d.bar
FROM dbo.TableB b
JOIN dbo.TableC c
JOIN dbo.TableD d -- <-- Nested join syntax
ON d.yyy = c.yyy
ON c.xxx = b.xxx
Run Code Online (Sandbox Code Playgroud)
对此...
SELECT b.bla, c.foo, d.bar
FROM dbo.TableB b
JOIN dbo.TableC c
ON c.xxx = b.xxx
JOIN dbo.TableD d -- <-- Regular way
ON d.yyy = c.yyy
Run Code Online (Sandbox Code Playgroud)
注意:在实际查询中,有 10 个连接表,包括内连接和外连接。就sql数据而言,这些表并不大。没有聚合。输出中有一个 DISTINCT。所有连接都指向一个主键,但外键不一定被索引。
我们肯定会改变我们的方式,但我仍然很好奇关于这种风格的正确“指导”。我经常使用“缩进”样式来表示诸如查找表之类的“更具可读性”的连接。
根据以下堆栈跟踪,我收到间歇性错误。我将 C# 实体框架与在单独的服务器计算机上运行的 SQL Server 2012 企业版一起使用。我可以从开发机器使用 SSMS 连接和查询数据库。
重新启动服务器计算机是问题的短期解决方案。然后连接再次工作,至少一段时间(数小时或数天)。
如何在不需要重新启动服务器计算机的情况下长期诊断或修复此问题?
Exception.ToString():
System.Data.Entity.Core.EntityException:
The underlying provider failed on Open. --->
System.Data.SqlClient.SqlException:
A network-related or instance-specific error occurred while establishing a connection to SQL Server.
The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: Named Pipes Provider, error: 40 -
Could not open a connection to SQL Server) --->
System.ComponentModel.Win32Exception: The network path …Run Code Online (Sandbox Code Playgroud) 我正在 Windows 2008 R2 上设置一个 SQL Server 2012 实验室,它有 5 个 SQL Server。我注册SQL1为我的中央管理服务器并在此服务器下创建了一个组,其中包括所有服务器和 CMS 本身。我有点困惑,因为文档说 CMS 不能是它维护的组的成员。但是,我可以将它包含在组中,运行多个查询并成功评估策略。
参考:http : //msdn.microsoft.com/en-us/library/bb895144.aspx参见“相关任务”
我看过其他论坛帖子,其中用户在注册 CMS 本身时遇到问题,但我根本没有这个问题。有什么改变了吗?
我正在运行 SQL Server 2012 Enterprise SP1 和 SSMS 2012。
Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 2012 年 12 月 28 日 20:23:12 版权所有 (c) Windows NT 6.1 上的 Microsoft Corporation Enterprise Edition(64 位)(内部版本 7601:Service Pack 1)(管理程序)
这是 CMS 返回整个组的查询。

好吧,我的问题很简单。
假设当我单击数据库并将鼠标悬停在收缩上时,它表示可以减少 1 GB 空间。
现在当我备份这个数据库时,这个空间是否也被添加到备份文件或备份过程有点特殊并且它已经缩小了?
SQL 服务器 2012
长话短说,我有一个名为 vwRelatives 的视图,它使用 CTE 递归来构建家谱。它旨在一次查询一个人。
这在大约四分之一秒内运行:
SELECT * FROM vwRelatives WHERE person_id = 5
Run Code Online (Sandbox Code Playgroud)
这(从应用程序执行查询的方式)大约需要 4.5 秒:
exec sp_executesql N'SELECT * FROM vwRelatives WHERE person_id = @P1',N'@P1 int',5
Run Code Online (Sandbox Code Playgroud)
(请注意,我已经稍微简化了查询。真实的东西有一个显式的列列表和一个ORDER BY,但WHERE语义是相同的。我在任何一个版本中都得到了相同的症状。)
最有可能的是,SQL Serverperson_id = 5在为第一个查询创建执行计划时能够将其考虑在内,但对其进行参数化会导致运行整个视图,然后按 person_id进行过滤。
所以我想我会创建一个计划指南。现在我有两个问题。
这些是我正在采取的步骤,但似乎没有任何效果。
首先,运行“好”查询以将其放入计划缓存...
SELECT * FROM vwRelatives WHERE person_id = 5
Run Code Online (Sandbox Code Playgroud)
...然后执行标准步骤将其变成计划指南...
--Get the 'good' plan
SET @xml_showplan = (
SELECT query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, DEFAULT, …Run Code Online (Sandbox Code Playgroud) 所以我有一个设置,其中一个虚拟机是 SQL Server 2012 发布者,我需要在不同虚拟机上的 SQL Server 2008 订阅者上设置合并复制。
在订阅者上设置订阅时,在添加 SQL Server 订阅者的向导步骤中,我收到该错误:
对于合并发布,订阅服务器的版本不得超过发布服务器的版本。
我读到 SQL Server 2012 发布支持 2008 年及以上的订阅者。
有任何想法吗 ?
我已经将用户映射到msdb数据库并分配给他的角色SQLAgentOperatorRole,但是用户在连接时仍然看不到列出的SQL Server代理。
在SQL Server代理确实显示了罚款,当我登录为sysadmin。
SQL Server 2012 中这两个“Connect SQL”权限有什么区别?

支持带有 SQL Server 2005 后端的现有 VB6 应用程序,我们正在将数据库服务器迁移到 SQL Server 2012。创建生产数据库的备份并将其恢复到两台服务器上的开发数据库中。除了服务器版本之外,数据库是相同的,并且兼容级别仍设置为 90 (SQL Server 2005)。
当我在 SQL Server 2005 上运行查询时,类似于下面的示例,返回一个字符串,其中任何空白字段都有额外的空格。如果我在 SQL Server 2012 上运行相同的查询,则不会返回额外的空格。据我所知,UNION ALL对没有记录和 char 数据类型的表执行似乎是一个问题,但我还是想问一下。
对于下面的例子中你需要创建一个表一个NOT NULL,Char(2)列命名Unit6。将表留空,一旦创建就没有记录。
CREATE TABLE [dbo].[tblTest](
[Unit6] [char](2) NOT NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
当我运行以下查询时,我收到两种不同的结果,具体取决于服务器版本:
SELECT
Unit5, Unit6,
LEN(Unit6) as Len_Unit6,
'--|' + Unit6 + '|--' as Spanner
FROM
(SELECT
'13' as Unit5,
'' as Unit6
UNION ALL
SELECT
'',
Unit6
FROM tblTest) as MyData
Run Code Online (Sandbox Code Playgroud)
SQL Server 2005 …
sql-server-2012 ×10
sql-server ×8
backup ×1
optimization ×1
permissions ×1
plan-guides ×1
powershell ×1
security ×1
shrink ×1