小编mar*_*c_s的帖子

查询 SQL Server 2008 R2 作业的所有者

有没有办法查询 SQL Server 2008 R2 中所有作业的所有者?我发现在编辑维护计划时所有者会发生变化,所以我想确保它们都归sa.

sql-server sql-server-2008-r2

5
推荐指数
2
解决办法
3865
查看次数

sp_sqlagent_get_perf_counters SQL Server 2005 每 20 秒运行一次

一点背景资料:

我们在装有 Microsoft Windows Server 2003 SP2 的服务器上运行 SQL Server 2005 SP2。

当我运行探查器时,我注意到它EXECUTE msdb.dbo.sp_sqlagent_get_perf_counters每 20 秒运行一次。

这是探查器每 20 秒运行一次:

SELECT N'Testing Connection...'
go
EXECUTE msdb.dbo.sp_sqlagent_get_perf_counters
go
Run Code Online (Sandbox Code Playgroud)

到目前为止我做了什么:

  • 我已经删除了系统上的所有演示警报。

可能的答案:

  • 我想知道 2005 年的服务包 3 或 4 是否可以解决这个问题?
  • 或者我可以在注册表或sql本身中设置什么?
  • 或者是否有适用于 Windows Server 2003 的补丁可能会有所帮助?

sql-server-2005 sql-server

5
推荐指数
1
解决办法
743
查看次数

声明游标以遍历 SQL Server 2008 R2 中的某些值

我有一些业务部门,如印度、国际、美国、英国。

我必须:

  1. 使用与存储过程SP_Report结果集匹配的列创建表变量(虚拟内存表)
  2. 声明一个包含所有业务单位的游标,然后游标应该在 BU 上循环
  3. 对于每个 BU,执行一个存储过程调用SP_Report并将数据插入到表变量中
  4. 最后我必须从表变量+时间戳+BU中选择列,将它们插入另一个表并清除表变量。

代码:

declare @K table (BU nvarchar(max), K nvarchar(max),Y money, A money, D money, YP money)
declare @FY int
declare @BU nvarchar(max)

INSERT INTO @K (BU, K, Y, A, D, YP) 
    EXEC dbo.SP_Report '2012', 'India'

SELECT * FROM @K
Run Code Online (Sandbox Code Playgroud)

此代码返回表变量的结果。现在我必须使用它游标,我不知道如何使用。我怎样才能解决同样的问题。

sql-server-2008 cursors

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

触发器和事务

我们最近进行了更改,以根据以前在存储过程中使用的逻辑创建约束,其中一部分包括使用INSTEAD OF触发器来集中逻辑。

逻辑通常很简单:

  1. 存储过程包含针对视图的 INSERT(或 UPDATE)语句,该视图具有 INSTEAD OF INSERT/UPDATE 触发器
  2. 触发器包含实际的逻辑——通常是两条语句,处理一条记录到主表和一个(或多个)支持表(包括参照完整性)的插入/更新。

问题是当触发器中的语句中遇到类似 CHECK 约束的东西时。事务被转储,一切都被回滚。我正在考虑必须在有问题的存储过程中复制 CHECK/etc 约束以在触发器执行之前进行验证——还有其他选择吗?

trigger sql-server-2005 sql-server transaction

5
推荐指数
1
解决办法
439
查看次数

使用 SQL Server 备份仅检索几行的最简单方法是什么?

我需要从 SQL Server 2008 数据库备份中手动检索几行。通常我会创建一个新数据库,将数据库备份恢复到新数据库,然后运行我的查询。但是,数据库很大,因此需要很长时间才能恢复。

有没有更简单的方法来获取旧数据?

sql-server-2008 sql-server restore

5
推荐指数
2
解决办法
819
查看次数

优化 SQL 查询

我必须选择小于给定 id 且大于给定 id 的 2 个值。我已经尝试过这个查询,但有没有更好的方法来做到这一点

小提琴Sql

Begin 

declare @rootValue int
declare @repID int

set @repID = 2
set @rootValue = (select Id from tblLookups where Id = @repID)

declare @rootMinusTwo int
declare @rootPlusTwo int

set @rootMinusTwo = (select count(*) from tblLookups where Id < @rootValue)
set @rootPlusTwo = (select count(*) from tblLookups where Id > @rootValue)

if @rootMinusTwo >= 2 and @rootPlusTwo >= 2
Begin
    select *  
    from tblLookups 
    where Id between @rootValue - 2 and @rootValue …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

5
推荐指数
2
解决办法
455
查看次数

复合主键 - 索引两个字段?

我在用户和角色之间有一个多对多连接表。

CREATE TABLE AppUserRole 
(
    UserId INT NOT NULL,
    RoleId INT NOT NULL, 

    CONSTRAINT PK_AppUserRole PRIMARY KEY (UserId, RoleId), 

    CONSTRAINT FK_AppUserRole_User FOREIGN KEY (UserId) 
        REFERENCES AppUser(UserId), 
    CONSTRAINT FK_AppUserRole_Role FOREIGN KEY (RoleId) 
        REFERENCES AppRole(RoleId)
);

CREATE INDEX IX_AppUserRole_RoleId ON AppUserRole(RoleId)
CREATE INDEX IX_AppUserRole_UserId ON User(UserId)
Run Code Online (Sandbox Code Playgroud)

既然复合键是按照 ( UserId, RoleId)的顺序聚集的,那么第二个索引 onUserId真的有必要吗?

当您查询特定的所有行时,UserId它将使用聚集索引。只有当您查询特定中的所有用户时,RoleId才会使用索引IX_AppUserRole_RoleId

索引是IX_AppUserRole_UserId必要的吗?

index sql-server learning primary-key t-sql

5
推荐指数
1
解决办法
1119
查看次数

在 SQL Server 中重建索引不会减少碎片

我正在尝试减少索引的碎片化。

首先,我重建了所有碎片高于 30% 的索引,但我的大多数索引仍然具有高碎片或什至没有改变 1%。

深入观察,当我减少重建语句的填充因子时,也会减少碎片。

现在,最好的选择是什么?

具有高填充因子的更高碎片或降低填充因子然后获得更低的碎片?

暂时谢谢。

index sql-server

5
推荐指数
2
解决办法
4123
查看次数

SQL Server:索引中包含的列:是否有“太多”之类的内容?

我们的一个数据库中有一张表,其结构大致如下:

Field1 int primary key
Field2 int foreign key A
Field3 int foreign key B
Field4 int foreign key C
Field5 ... Field70 diverse data types, for the "payload"
Run Code Online (Sandbox Code Playgroud)

外键列上有索引,尽管只有键列,没有任何包含的列。索引分析例程不断建议具有相同键列的新索引,这些列已经存在索引,但包含许多列 - 在一种情况下甚至是所有 Field5 到 Field70。我有点犹豫是否要创建包含如此多列的索引 - 感觉就像复制表本身。

对于索引中包含的列的数量是否有一些经验法则限制,或者我应该继续将现有索引(仅键列)替换为具有相同键列和如此多包含列的索引?

提前致谢。

index sql-server

5
推荐指数
1
解决办法
1696
查看次数

SQL Server 2008 R2-SP2 上的 Tempdb 日志文件不断增长。使用临时表的挂起插入语句可能是原因吗?

我刚刚开始担任 DBA 的新工作。突然间,我们开始收到有关磁盘空间的警报。当我查看时,我发现 tempdb 日志文件在不断增长。有一个针对它的活跃事务正在运行。我检查了查询,它使用的是临时表。从45分钟开始,事情就毫无进展了。我尝试了很多事情,包括这些作为最后的手段。

use tempdb
GO
DBCC FREEPROCCACHE -- clean cache
DBCC DROPCLEANBUFFERS -- clean buffers
DBCC FREESYSTEMCACHE ('ALL') -- clean system cache
DBCC FREESESSIONCACHE -- clean session cache
Run Code Online (Sandbox Code Playgroud)

但这根本没有帮助。我还杀死了卡住的插入件。看来这并没有超出正常流程。最后我不得不紧急中断几分钟并重新启动 SQL 服务。关于我可能错过的内容有什么建议吗?

sql-server transaction-log

5
推荐指数
1
解决办法
5355
查看次数