有没有办法查询 SQL Server 2008 R2 中所有作业的所有者?我发现在编辑维护计划时所有者会发生变化,所以我想确保它们都归sa.
一点背景资料:
我们在装有 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)
到目前为止我做了什么:
可能的答案:
我有一些业务部门,如印度、国际、美国、英国。
我必须:
SP_Report结果集匹配的列创建表变量(虚拟内存表)SP_Report并将数据插入到表变量中代码:
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)
此代码返回表变量的结果。现在我必须使用它游标,我不知道如何使用。我怎样才能解决同样的问题。
我们最近进行了更改,以根据以前在存储过程中使用的逻辑创建约束,其中一部分包括使用INSTEAD OF触发器来集中逻辑。
逻辑通常很简单:
问题是当触发器中的语句中遇到类似 CHECK 约束的东西时。事务被转储,一切都被回滚。我正在考虑必须在有问题的存储过程中复制 CHECK/etc 约束以在触发器执行之前进行验证——还有其他选择吗?
我需要从 SQL Server 2008 数据库备份中手动检索几行。通常我会创建一个新数据库,将数据库备份恢复到新数据库,然后运行我的查询。但是,数据库很大,因此需要很长时间才能恢复。
有没有更简单的方法来获取旧数据?
我必须选择小于给定 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) 我在用户和角色之间有一个多对多连接表。
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必要的吗?
我正在尝试减少索引的碎片化。
首先,我重建了所有碎片高于 30% 的索引,但我的大多数索引仍然具有高碎片或什至没有改变 1%。
深入观察,当我减少重建语句的填充因子时,也会减少碎片。
现在,最好的选择是什么?
具有高填充因子的更高碎片或降低填充因子然后获得更低的碎片?
暂时谢谢。
我们的一个数据库中有一张表,其结构大致如下:
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。我有点犹豫是否要创建包含如此多列的索引 - 感觉就像复制表本身。
对于索引中包含的列的数量是否有一些经验法则限制,或者我应该继续将现有索引(仅键列)替换为具有相同键列和如此多包含列的索引?
提前致谢。
我刚刚开始担任 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 ×9
index ×3
t-sql ×2
cursors ×1
learning ×1
primary-key ×1
restore ×1
transaction ×1
trigger ×1