我有一个存储过程,插入一行如下:
CREATE PROCEDURE dbo.sp_add_test
@CreatedBy NVARCHAR (128),
@TestId INT
AS
BEGIN
SET NOCOUNT ON
INSERT INTO dbo.Test (
CreatedDate,
Title,
ParentTestId,
)
SELECT
@CreatedDate
Title,
@TestId
FROM Test
WHERE TestId = @TestId;
SELECT * from Test
WHERE TestId = @TestId
AND CreatedDate = @CreatedDate;
END
插入后,将为主键生成新的标识值。插入完成后,我会从该表中进行选择。
有人可以告诉我是否还有其他办法可以做到这一点?我做第二次选择的原因是我需要为新的TestId获取一个标识列的值。
我不熟悉SQL Server缓存数据的方式。它是否以与Oracle相同的方式缓存最近使用的行,还是将其转到磁盘以获取刚刚插入的行?
答案 0 :(得分:0)
在SQL Server中,执行此操作的正确方法是使用OUTPUT
子句。文档为here。
据我所知,SQL Azure支持OUTPUT
子句。
至于你的问题,当数据库作为页面提交时(即insert
完成时),页面通常会保留在内存中。通常,“提交”是日志操作,因此数据页面保留在内存中。在不需要磁盘访问的意义上,对页面的立即访问应该很快。但是OUTPUT
子句是SQL Server中的正确方法。