使用MSSQL2005,如果我先截断子表(具有FK关系主键的表),是否可以截断具有外键约束的表?
我知道我也可以
DELETE不带where子句然后RESEED使用身份(或)我认为只要我在父母之前截断子表,我就可以不用上面的任何一个选项,但是我收到了这个错误:
无法截断表'TableName',因为它正被FOREIGN KEY约束引用.
我想一次更新两个表.我如何在SQL Server 2005中这样做?
UPDATE
Table1,
Table2
SET
Table1.LastName='DR. XXXXXX',
Table2.WAprrs='start,stop'
FROM
Table1 T1,
Table2 T2
WHERE
T1.id = T2.id
AND
T1.id = '010008'
Run Code Online (Sandbox Code Playgroud) SET XACT_ABORT ON在存储过程中使用有什么好处?
我有这个交易:
BEGIN TRAN;
Update Job set JobTitle = 'wonderfullivin' where JobId = 1271;
Update Job set LastTransactionDate = null where JobId = 1271;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
其中第二个语句必须失败,因为LastTransactionDate设置为NOT NULL.当我查看事务日志时,我看到事务已提交.它不应该被中止,因为其中一个查询失败了吗?
我一直在研究这两个问题:
根据我的研究,我得出的结论是查询应该这样写:
set XACT_ABORT ON
begin tran FB5773_1
begin try
-- Do some changes
commit tran FB5773_1;
end try
begin catch
IF EXISTS (SELECT [name] FROM sys.dm_tran_active_transactions WHERE name = 'FB5773_1')
rollback tran FB5773_1;
end catch
Run Code Online (Sandbox Code Playgroud)
不过我想知道为什么交易是这样的
begin tran FB5773_1
--do some stuff
commit tran FB5773_1;
Run Code Online (Sandbox Code Playgroud)
或这个
set XACT_ABORT ON
begin tran FB5773_1
--do some stuff
commit tran FB5773_1;
Run Code Online (Sandbox Code Playgroud)
在某些情况下错误时不回滚,不回滚的情况是什么?