-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInMemoryTempTables--5.3.sql
More file actions
74 lines (64 loc) · 1.67 KB
/
InMemoryTempTables--5.3.sql
File metadata and controls
74 lines (64 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
USE WideWorldImporters
SET NOCOUNT ON;
GO
CREATE PROCEDURE sp_temp_OnDisk
AS
BEGIN
DROP TABLE IF EXISTS #temp1
CREATE TABLE #temp1
(
c1 INT NOT NULL ,
c2 NVARCHAR(4000)
);
BEGIN TRAN
DECLARE @i INT = 0;
WHILE @i < 100000
BEGIN
INSERT #temp1
VALUES ( @i, N'abc' );
SET @i += 1
END;
COMMIT
END;
GO
-- Function To Enable Row-Level Security
CREATE FUNCTION dbo.fn_SessionFilter(@session_id smallint)
RETURNS TABLE
WITH SCHEMABINDING, NATIVE_COMPILATION
AS
RETURN SELECT 1 as fn_SessionFilter WHERE @session_id=@@spid;
GO
DROP TABLE IF EXISTS dbo.temp1
GO
--Create In-Memory Temp Table
CREATE TABLE dbo.temp1
(
c1 INT NOT NULL ,
c2 NVARCHAR(4000) ,
session_id SMALLINT NOT NULL DEFAULT ( @@spid ) ,
INDEX IX_session_id ( session_id ) ,
CONSTRAINT CHK_temp1_session_id CHECK ( session_id = @@spid ),
)
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_ONLY);
GO
-- add security policy to enable filtering on session_id, for each temp table
CREATE SECURITY POLICY dbo.temp1Filter
ADD FILTER PREDICATE dbo.fn_SessionFilter(session_id)
ON dbo.temp1
WITH (STATE = ON);
GO
CREATE OR ALTER PROCEDURE sp_temp_InMem
AS
BEGIN
DELETE FROM dbo.temp1;
BEGIN TRAN
DECLARE @i INT = 0;
WHILE @i < 100000
BEGIN
INSERT dbo.temp1 (c1, c2)
VALUES ( @i, N'abc' );
SET @i += 1;
END;
COMMIT
END;
GO