SQL Server 常用功能相关
1 标识值
1.1 查询当前标识值
USE [数据库名];
GO
DBCC CHECKIDENT ('dbo.表名', NORESEED);
GO
/* 示例
* “标识值”:自增值;“当前列值”:表中的最大值;正常情况“标识值”与“当前列值”相等。
* 执行输出结果为:
* 检查标识信息: 当前标识值 '84202',当前列值 '84202'。
* DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/
1.2 修改当前标识值
自动重置 推荐
注意
以下为不自动重置的情况,需要手工设置
- 当前标识值大于表中的最大值。
- 表中的所有行被删除。
USE [数据库名];
GO
DBCC CHECKIDENT ('dbo.表名');
GO
手工设置
USE [数据库名];
GO
-- 示例:
-- 将AddressType表的标识值设置为 10,后面新插入行将使用 11 作为自增值。
-- DBCC CHECKIDENT ('dbo.AddressType', RESEED, 10);
DBCC CHECKIDENT ('dbo.表名', RESEED, 表中的最大值/指定数值);
GO
有关详细信息,请参阅: DBCC CHECKIDENT (Transact-SQL)
2 允许将显式值插入到表的标识列中
注意
- 任何时候,一个会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。
- 批量插入时目标数据表需要表明列,数据源表则没有要求。
✅ INSERT INTO dbo.Tool (ID, Name) SELECT * FROM dob.ToolSource
❌ INSERT INTO dbo.Tool SELECT * FROM dob.ToolSource
USE [数据库名];
GO
-- 创建示例表“Tool”
CREATE TABLE dbo.Tool(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
);
SET IDENTITY_INSERT dbo.Tool ON;
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel');
SET IDENTITY_INSERT dbo.Tool OFF;
有关详细信息,请参阅: SET IDENTITY_INSERT (Transact-SQL)
3 事务
3.1 命名事务
DECLARE @TranName VARCHAR(20);
SELECT @TranName = '示例事务';
BEGIN TRANSACTION @TranName;
USE AdventureWorks2012;
DELETE FROM AdventureWorks2012.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION @TranName;
GO
有关详细信息,请参阅: BEGIN TRANSACTION (Transact-SQL)
3.2 在事务内使用 TRY…CATCH
BEGIN TRANSACTION;
BEGIN TRY
-- 假设此表上存在FOREIGN KEY约束。下面语句将生成约束冲突错误。
DELETE FROM Production.Product
WHERE ProductID = 980;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber -- 错误编号
,ERROR_SEVERITY() AS ErrorSeverity -- 严重性
,ERROR_STATE() AS ErrorState -- 错误状态号
,ERROR_PROCEDURE() AS ErrorProcedure -- 出现错误的存储过程或触发器的名称
,ERROR_LINE() AS ErrorLine -- 导致错误的例程中的行号
,ERROR_MESSAGE() AS ErrorMessage; -- 错误消息的完整文本
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
GO
说明:
@@TRANCOUNT
返回在当前连接上执行的 BEGIN TRANSACTION
语句的数目,数目变化可以由下列操作引起:
BEGIN TRANSACTION
语句将@@TRANCOUNT
增加 1。ROLLBACK TRANSACTION
将@@TRANCOUNT
设为 0。COMMIT TRANSACTION
或COMMIT WORK
将@@TRANCOUNT
递减 1。
有关详细信息,请参阅:
4 会话
4.1 查询数据库的连接会话
SELECT
sess.session_id, login_name, DB_NAME(database_id) AS [数据库],
host_name as [主机名称], program_name as [客户端程序名称],
connect_time, last_request_end_time
FROM sys.dm_exec_sessions AS sess
INNER JOIN sys.dm_exec_connections AS conn
ON sess.session_id = conn.session_id;
有关详细信息,请参阅:sys.dm_exec_sessions (Transact-SQL)
4.2 当前连接的会话 ID
SELECT @@SPID;
4.3 结束会话
-- 51 是 session_id (会话 ID)
KILL 51;
有关详细信息,请参阅:(KILL (Transact-SQL)