每当在 CUSTOMER 表中发生 INSERT 时,我需要调用“ StoredProcedure1 ”并且在 CUSTOMER 表中发生 UPDATE,我需要在触发器中调用“ StoredProcedure2 ”。 如何确定是在 SQL Server 2008的触发器中插入还是更新。
有人可以请帮我如何解决?
代码:
CREATE TRIGGER Notifications ON CUSTOMER
FOR INSERT,UPDATE
AS
BEGIN
DECLARE @recordId varchar(20);
set @recordId= new.Id;
//if trigger is insert at the time I call to SP1
EXEC StoredProcedure1 @recordId
//if trigger is Upadeted at the time I call to SP2
EXEC StoredProcedure2 @recordId
END
Run Code Online (Sandbox Code Playgroud) 我希望在 SQL Server 2008 中对 SQL 数据库进行完整的数据库备份。
我的问题是:
我知道什么是表扫描、聚集索引扫描和索引查找,但我的谷歌技能让我无法找到非聚集索引扫描的精确解释。为什么以及何时查询使用非聚集索引扫描?
谢谢你。
index sql-server-2008 sql-server sql-server-2008-r2 nonclustered-index
我正在尝试使处于恢复挂起状态的 SQL Server 数据库联机并可访问。SQL Server 服务使用一个 Active Directory 帐户,该帐户是域管理员并且是sysadminsql server 上的成员。SQL Server 帐户应该拥有 SQL 文件夹中的权限,因为它是域管理员。但是,它不是 SQL Server 中的本地管理员。
错误消息是:
消息 5120,级别 16,状态 101,第 1 行无法打开物理文件“F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DBName.ndf”。操作系统错误 5:“5(访问被拒绝。)”。消息 5120,级别 16,状态 9,第 1 行无法打开物理文件“F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DBName.ndf”。操作系统错误 5:“5(访问被拒绝。)”。
尽管
alter database [DBName] set online;
Run Code Online (Sandbox Code Playgroud)
导致以下错误:
消息 945,级别 14,状态 2,第 1 行由于无法访问的文件或内存或磁盘空间不足,无法打开数据库“databs”。有关详细信息,请参阅 SQL Server 错误日志。消息 5069,级别 16,状态 1,第 1 行 ALTER DATABASE 语句失败。
你能想到解决办法吗?
我有一个在SQL Server实例上运行的会话,它阻塞了其他会话(保持锁定而不释放它)。
查询sys.sysprocesses产生了不同SQL Server实例的主机名。
我想知道最终负责阻止链接服务器上的会话的原始会话的 spid。
我正在阅读这篇文章以了解 Sql Server 中的事情是如何完成的:http : //rusanu.com/2013/08/01/understanding-how-sql-server-executes-a-query/
如果我理解正确,数据将根据需要发送给客户端。在我们将下一批数据提取到客户端之前,查询的执行被暂停。如果我们进行范围扫描,则有关最后返回行的元数据将存储在某处。如果在此期间页面拆分并且最后返回的行在新页面上,会发生什么情况?这可能吗?这个操作符/迭代器(例如聚集索引扫描)是否一直保持在页面上的闩锁?这将是非常低效的,所以 Sql Server 必须有其他方法来保持同步吗?
我的问题是 - 存储了哪些元数据以及 Sql Server 如何保持同步?
我正在尝试做一些非常简单的事情,但有一个问题:
declare @cmd varchar(1000)
set @cmd='restore verifyonly from disk =''\\server\backup_folder\''?'''
exec sp_msforeachdb @cmd
Run Code Online (Sandbox Code Playgroud)
显然它不起作用。我需要运行备份文件的名称Verifyonly(在上面的代码中,我使用的是数据库名称)。
有没有办法自动化Verifyonly,在所有备份文件中运行?
如何在我的代码中使用已创建的备份文件的名称?
非常感谢。
(人们MsForeachdb说不安全。我会尝试搜索另一个选项,例如Foreachdb)
SQL 服务器 2008
EDIT1:嗯,正如我在这里看到的,我认为这不是verifyonly一个好主意,但知道如何去做会很好(仅用于知识)
我在 SQL Server 2008 R2 上有一个包含 5 个 .ndf(辅助)数据文件的数据库。(这些数据文件中的每一个都被分配到一个单独的文件组。)我想知道这些文件中有哪些数据。是否可以?我知道这些文件组中有全文索引(并且由于每个文件组只有一个文件,因此创建这么多文件的唯一目的可能是将全文索引放在不同的文件组中,我不知道)。我想确保除了全文索引之外没有其他数据。
谢谢
我有一个表,我错误地在列中允许 NULL 值:
CREATE TABLE EXAMPLE (
EXAMPLE_ID INT IDENTITY(1, 1) NOT NULL,
FOO_ID INT,
CREATED_ON DATETIME DEFAULT CURRENT_TIMESTAMP, -- Oops!
CODE VARCHAR(50),
QUOTE DECIMAL(18,2),
BAR_ID TINYINT NOT NULL DEFAULT 1,
CONSTRAINT EXAMPLE_PK PRIMARY KEY (EXAMPLE_ID),
CONSTRAINT EXAMPLE_FK1 FOREIGN KEY (FOO_ID)
REFERENCES FOO (FOO_ID)
ON DELETE CASCADE,
CONSTRAINT EXAMPLE_FK2 FOREIGN KEY (BAR_ID)
REFERENCES BAR (BAR_ID)
);
CREATE INDEX EXAMPLE_IDX1 ON EXAMPLE (FOO_ID);
CREATE INDEX EXAMPLE_IDX2 ON EXAMPLE (BAR_ID);
Run Code Online (Sandbox Code Playgroud)
这是一个相当不重要的列(没有索引,没有外键,没有在触发器中使用......),这是我通常修复它的方式:
ALTER TABLE EXAMPLE
ALTER COLUMN CREATED_ON DATETIME NOT NULL;
-- Runs …Run Code Online (Sandbox Code Playgroud) 我们可以在 SQL Server 2008 中的视图上创建索引吗?我听说过索引视图,它可以提高性能,但问题是这些视图的数据刷新:一旦基表中的数据发生变化,它可以自动更新吗?
sql-server-2008 ×10
sql-server ×7
backup ×2
corruption ×1
datafile ×1
filegroups ×1
files ×1
index ×1
insert ×1
recovery ×1
security ×1
ssms ×1
t-sql ×1
trigger ×1
update ×1