是否可以将表名传入存储过程?
例如,假设您有同一个表的多个视图。它们都具有完全相同的结构。
您需要一个可以为任何视图运行的存储过程。
就像是:
create procedure myprocedure
@tableName varchar(50) = ''
select blah from @tableName where blah = blah2
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时,我得到
Must declare the table variable @tablename
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么能做到这一点?
我正在尝试在 SQL Server 2008 R2 中设置服务器端跟踪。虽然我可以轻松选择事件和数据列,但过滤似乎有点奇怪......
我试图对 SQL 批处理或存储过程的持续时间设置过滤(过滤任何 >= 1000 毫秒),但我也想过滤所涉及的数据库名称。
当我将跟踪定义从 SQL Profiler 导出到*.sql文件时,我似乎没有找到对数据库名称的任何过滤:
-- lots of other stuff up here - setting up trace events and so on...
-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint
exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 100479e4-6eeb-4608-af17-64141f1631ec'
set @bigintfilter = 1000000
exec sp_trace_setfilter @TraceID, 13, 0, 4, @bigintfilter
....
Run Code Online (Sandbox Code Playgroud)
那是怎么回事?为什么我可以指定要过滤的数据库名称 - 但跟踪定义最终不包含它?
更新:经过一番折腾,我得出以下结论:
Create Trace在我的情况下,数据库名称的过滤器未应用于脚本,因为我最终只选择了Locks …
在 SQL Server 2012 中,对通过使用资源调控器控制内存使用进行了哪些具体的增强。直到 SQL Server 2008 R2 资源调控器只能控制与查询内存授予相关的内存。
我查看了SQL Server 2012 BOL,但它没有明确说明任何内容。
我对使用 Waits 和 Queues 进行性能调整还很陌生 - 很吸引人,但也不总是那么直观......
现在,我的一个客户有一个 SQL Server 2008 64 位企业版,目前分配给它 16 GB 的 RAM,在具有 64 GB RAM 的物理服务器上运行(在同一台上还有其他和更改的 SQL Server 实例)机)。
他正在运行的这个应用程序是一个 Sharepoint 2010 解决方案,在大多数情况下,它的性能 - 很好 - 对于 Sharepoint 站点来说还可以。除了搜索,这是非常缓慢的。
现在从 SQL Server 的角度来看,我已经观察了几天的等待统计数据,前三种等待类型是:
1) CXPACKET 约为 49%
2) SOS_SCHEDULER_YIELD 约为 10.5%
3) OLEDB 约为 9.5%
这似乎非常一致——随着时间的推移没有大的变化。
信号等待时间极短,所以这似乎并不表示 CPU 压力。那么是什么导致了这种模式——我们可以做些什么来 (a) 找到更多相关信息,或 (b) 找到加快速度的解决方案?
有什么想法吗?见解?想法?我对任何事情都持开放态度——我们不能改变的是基本架构(单独的 SQL Server 实例,在物理服务器之间移动——以及基于 Unix 的 SAN,它不能保证数据和登录到单独的物理磁盘上的分离)
再说一遍:这是一个SharePoint网站 …
我已经在 ServerFault 上发布了这个,但没有多少运气得到回应。
我有一个相当大的 SQL Server 数据库(~2TB)。大多数数据都在一个表中(约 60 亿行)。
两周前,我在大表上删除了两个非聚集索引,并将数据迁移到单个 6TB RAID SSD 阵列上。然后我重新创建了两个需要很长时间的索引(假设因为我目前有数据(用于表和索引)并登录到同一个阵列上,似乎使用 RAID 我不能有快速的顺序和随机 r/w同时)。
无论如何,在重新创建索引后,它运行了大约一个星期。在这一周中,我一直在大桌子上慢慢清理,它只是删除了旧的不需要的行。到目前为止,我已经从 60 亿中删除了大约 3 亿,而且我猜测我还有很多事情要做。
现在像这样运行了大约一个星期后,它现在运行得很慢,我不确定哪个最好。
现在的情况:
大表目前有(我之前没有任何碎片信息):
你认为什么最能解决我的问题
碎片化的索引会导致更高的 CPU 使用率吗?
还有什么我可能会错过的吗?
TIA
我们注意到,自部署 Windows 2012/SQL Server 2012 以来,性能DTUTIL有所下降。DTUTIL.exe在 8 GB VM 上的 2 个核心中的每一个上消耗 50%。针对 Win 2008 R2/SQL Server 2008 R2 的相同语法显示对具有相似规格的 VM 几乎没有影响。总的来说,部署一个包大约需要 90-120 秒。
我们在 SP1 上使用 64 位 SQL Server 2012 企业版;命令的语法是:
"C:\Program Files\Microsoft SQL Server\110\DTS\Binn\dtutil.exe" /DestS COMPUTER1 /FILE "e:\folder\SSISPackage.dtsx" /COPY "SQL;FOO\BAR\SSISPackage" /QUIET
Run Code Online (Sandbox Code Playgroud)
我们还没有在 2012 年使用新的 SSIS 方法尝试过这个。我们已经验证了跨多个不同包的行为重现。我们还查看了所有 SP1 之后的累积更新;它们似乎没有解决这个问题,但我们也没有应用它们来排除这个问题。
有没有其他人遇到/解决过这个问题?诚然,包部署不是高频操作,但我们确实在自动化部署过程中注意到了这一点。
我们正在使用nHibernate它从.NET代码生成查询。有时,某些查询会卡在sp_whoisactive列表中,我们无法找出原因。我有一种感觉,它与丢失或损坏的参数有关。sp_whoisactive但是,当我运行时,我只看到参数名称(在示例中:)@p0,而不是实际值。有没有办法在进程仍在运行时检索此信息?
例子:
SELECT
this_.Id as Id6_2_, this_.HRNumber as HRNumber6_2_,
this_.FirstName as FirstName6_2_, this_.LastName as LastName6_2_,
this_.StatusTypeID as StatusTy5_6_2_,
this_.PropertyId as PropertyId6_2_, this_.DepartmentGroupId as Departme7_6_2_,
property2_.PropertyID as PropertyID10_0_,
property2_.PropertyCode as Property2_10_0_,
property2_.LMSCode as LMSCode10_0_, property2_.PropertyName as Property4_10_0_,
property2_.Report as Report10_0_, department3_.Id as Id4_1_,
department3_.Name as Name4_1_, department3_.DisplayName as DisplayN3_4_1_
FROM
[dbo].[EmployeeDepartmentGroupView] this_
LEFT OUTER JOIN
[dbo].[Property] property2_ ON this_.PropertyId=property2_.PropertyID
LEFT OUTER JOIN
[dbo].[DepartmentGroup] department3_ ON this_.DepartmentGroupId=department3_.Id
WHERE
this_.HRNumber LIKE @p0;
Run Code Online (Sandbox Code Playgroud)
请注意,这是从 …
我有一个 SQL Server 代理作业,它在一个步骤中调用 PowerShell 脚本。我想将 SQL 服务器名称和当前作业 ID 传递给我的脚本。
有了工作 ID,我没有问题。但是使用服务器名称...
我的 PowerShell 调用如下所示:
.\StopServices.ps1 -ServerName $(ESCAPE_DQUOTE(A-SVR)) -JobId $(ESCAPE_DQUOTE(JOBID))
Run Code Online (Sandbox Code Playgroud)
作业 ID 工作正常,但服务器名称为空。
如何将服务器名称传递给我的 PowerShell 脚本?
我正在使用 SQL Server 2014 设置一个 OLAP 数据库。核心事实表有大约 40,000,000 行、225 列,平均行大小为 181 字节。我一直在玩聚簇列存储索引,但运气不佳。一般来说,我发现使用新技术时查询性能要慢 4 倍以上。
一个特殊的例子 - 使用 int32 主键选择单行现在需要 12 秒......这是对行存储表的亚秒操作(当然它在 PK 上有一个唯一索引,这不允许与聚集列存储索引)。
我试图找出我做错了什么 - 从 MS 文档中听起来这是完成这项任务的理想技术;也许我错过了一些东西。
我正在 Windows 8.1 64 位上运行 SQL 2014 Enterprise,具有 128GB RAM 和 SSD 用于数据存储。此应用程序的数据是只读的。
最近我遇到了一个问题,来自一个域的用户无法登录 SQL Server 并收到此错误:
错误:17806,严重性:20,状态:2。SSPI
握手失败,错误代码为 0x8009030c,同时建立具有集成安全性的连接;连接已关闭。[客户:xxxxxx]错误:18452,严重性:14,状态:1
。用户登录失败”。用户未与受信任的 SQL Server 连接相关联。[客户:xxxxxx]
我们有两个域,比如说 A 和 B。我的 SQL Server 在域 B 中运行。在正常情况下,两个域用户都能够连接。但是前几天,域A的所有用户都无法连接到域B中运行的SQL Server。但是域B的用户却能够成功连接。用户联系 SQL Server DBA 团队调查问题。
当我检查时,即使我无法使用 SSMS 并使用域 A 的凭据远程连接到 SQL Server。但是,当我尝试使用域 A 的凭据对服务器进行 RDP 时,它工作正常,并且在远程访问 SQL Server 后也开始工作美好的。所以在我看来,当我对服务器进行 RDP 时,某些东西得到了刷新并且我的登录远程开始正常工作。我确信实际问题与 AD 和 kerberos 身份验证有关,但无法证明。
我在网上研究了这个问题,并找到了两个解决方案来解决它。一是修复故障 DC,二是重新启动运行 SQL Server 的服务器。我采用了第二种方式,因为 Windows 管理员不接受这是 DC 问题。我从 SQL 端检查了所有内容,最近没有任何变化。还发现在运行 SQL Server 的服务器上记录以下事件后,此问题开始发生:
日志名称:系统
来源:NETLOGON
日期:xxxxxxxx
事件 ID:5719 任务
类别:无
级别:错误
关键字:经典
用户:不适用
计算机:xxxxxxxxxx
描述:这台计算机无法与域控制器建立安全会话domain xxxxxx 由于以下原因: 当前没有可用于为登录请求提供服务的登录服务器。这可能会导致身份验证问题。确保此计算机已连接到网络。如果问题仍然存在,请联系您的域管理员。附加信息 如果此计算机是指定域的域控制器,它会设置与指定域中的主域控制器模拟器的安全会话。否则,此计算机将与指定域中的任何域控制器建立安全会话。
我的问题是:
sql-server ×6
columnstore ×1
nhibernate ×1
olap ×1
powershell ×1
sharepoint ×1
ssis ×1
ssis-2012 ×1
wait-types ×1