Flow on MS SQL - Extended
This is the second part of the training "Flow on MS SQL Server". In this training we will cover hierarchical data, stored procedures, Data Tree portlet and Row Level Security
Prerequisites:
ed if you haven't already done the previous excercises
--Use Master
CREATE LOGIN Mars WITH password='2ABYlabiRdWckJsSnOxd';
CREATE LOGIN Moon WITH password='dNADM2vDJ1MdnzLlLBCp';--Only needed if you haven't already done the previous excercises
/****** Object: User [Mars] Script Date: 2021-06-04 14:00:21 ******/
CREATE USER [Mars] FOR LOGIN [Mars] WITH DEFAULT_SCHEMA=[dbo]
GO
/****** Object: User [Moon] Script Date: 2021-06-04 14:00:21 ******/
CREATE USER [Moon] FOR LOGIN [Moon] WITH DEFAULT_SCHEMA=[dbo]
GO
ALTER ROLE [db_owner] ADD MEMBER [Mars]
GO
ALTER ROLE [db_owner] ADD MEMBER [Moon]
GO
/****** Object: Table [dbo].[Task] Script Date: 2021-06-04 14:00:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Task](
[TaskId] [int] IDENTITY(1,1) NOT NULL,
[TaskName] [nvarchar](100) NULL,
[ParentTaskId] [int] NULL,
[StartDt] [datetime2](0) NULL,
[EndDt] [datetime2](0) NULL,
[Projectid] [int] NULL,
[Hid] [hierarchyid] NULL,
[RowCreatedDt] [datetime2](0) NULL,
[RowCreatedBy] [nvarchar](150) NULL,
[RowUpdateDt] [datetime2](0) NULL,
[RowUpdatedBy] [nvarchar](150) NULL,
[testcol] [int] NULL,
CONSTRAINT [PK_Task] PRIMARY KEY CLUSTERED
(
[TaskId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [dbo].[vTask] Script Date: 2021-06-04 14:00:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [dbo].[vTask]
as
/*
2021-05-23 olcase: Created
Select * from vTask
Select * from Task
*/
Select
t.[TaskId], t.[TaskName], t.[ParentTaskId], t.[StartDt], t.[EndDt], t.[Projectid]
from task t
GO
/****** Object: Table [dbo].[Project] Script Date: 2021-06-04 14:00:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Project](
[ProjectId] [int] IDENTITY(1,1) NOT NULL,
[ProjectName] [nvarchar](100) NULL,
[RowCreatedDt] [datetime2](0) NULL,
[RowCreatedBy] [nvarchar](150) NULL,
[RowUpdateDt] [datetime2](0) NULL,
[RowUpdatedBy] [nvarchar](150) NULL,
CONSTRAINT [PK_Project] PRIMARY KEY CLUSTERED
(
[ProjectId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Resource] Script Date: 2021-06-04 14:00:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Resource](
[ResourceId] [int] IDENTITY(1,1) NOT NULL,
[ResourceName] [nvarchar](100) NULL,
[RowCreatedDt] [datetime2](0) NULL,
[RowCreatedBy] [nvarchar](150) NULL,
[RowUpdateDt] [datetime2](0) NULL,
[RowUpdatedBy] [nvarchar](150) NULL,
CONSTRAINT [PK_Resource] PRIMARY KEY CLUSTERED
(
[ResourceId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[TaskAssignment] Script Date: 2021-06-04 14:00:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TaskAssignment](
[TaskAssignmentId] [int] IDENTITY(1,1) NOT NULL,
[TaskId] [int] NULL,
[ResourceId] [int] NULL,
[RowCreatedDt] [datetime2](0) NULL,
[RowCreatedBy] [nvarchar](150) NULL,
[RowUpdateDt] [datetime2](0) NULL,
[RowUpdatedBy] [nvarchar](150) NULL,
CONSTRAINT [PK_TaskAssignment] PRIMARY KEY CLUSTERED
(
[TaskAssignmentId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [dbo].[vVisualPlanning] Script Date: 2021-06-04 14:00:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [dbo].[vVisualPlanning]
as
/*
2021-05-23 olcase: Created
Select * from vVisualPlanning
Select * from Task
Select * from Project
Select * from TaskAssignment
Select * from Resource
*/
Select
t.[TaskId], t.[TaskName], t.[ParentTaskId], t.[StartDt], t.[EndDt], t.[Projectid]
from task t
left join Project p on p.ProjectId = t.Projectid
join TaskAssignment ta on ta.TaskId = t.TaskId
Join Resource r on ta.ResourceId = r.ResourceId
GO
ALTER TABLE [dbo].[Project] ADD CONSTRAINT [DF_Project_RowCreatedDt] DEFAULT (getdate()) FOR [RowCreatedDt]
GO
ALTER TABLE [dbo].[Resource] ADD CONSTRAINT [DF_Resource_RowCreatedDt] DEFAULT (getdate()) FOR [RowCreatedDt]
GO
ALTER TABLE [dbo].[Task] ADD CONSTRAINT [DF_Task_RowCreatedDt] DEFAULT (getdate()) FOR [RowCreatedDt]
GO
ALTER TABLE [dbo].[TaskAssignment] ADD CONSTRAINT [DF_TaskAssignment_RowCreatedDt] DEFAULT (getdate()) FOR [RowCreatedDt]
GO
ALTER TABLE [dbo].[Task] WITH CHECK ADD CONSTRAINT [FK_Task_Project] FOREIGN KEY([Projectid])
REFERENCES [dbo].[Project] ([ProjectId])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Task] CHECK CONSTRAINT [FK_Task_Project]
GO
ALTER TABLE [dbo].[TaskAssignment] WITH CHECK ADD CONSTRAINT [FK_TaskAssignment_Resource] FOREIGN KEY([ResourceId])
REFERENCES [dbo].[Resource] ([ResourceId])
GO
ALTER TABLE [dbo].[TaskAssignment] CHECK CONSTRAINT [FK_TaskAssignment_Resource]
GO
ALTER TABLE [dbo].[TaskAssignment] WITH CHECK ADD CONSTRAINT [FK_TaskAssignment_Task] FOREIGN KEY([TaskId])
REFERENCES [dbo].[Task] ([TaskId])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[TaskAssignment] CHECK CONSTRAINT [FK_TaskAssignment_Task]
GO
select @@VERSIONSELECT SERVERPROPERTY('productversion'),
SERVERPROPERTY ('productlevel'),
SERVERPROPERTY ('edition')Parent/Child and Hierarchies

SQL Insert into
Stored Procedure - NewTask
ToString() and IsDescendantOf()


Portlet: Data Tree


Hierarchy.IsDescendantOf()

Deleting rows and Raiserror





Stored Procedure – MoveTask
Executing Stored Procedures from Flow










Row Level Security
Create RLSAccess table


Create Row Level Security table function
Tab groups in MSSMS






SQL Indexes
Clustered and non clustered indexes
Hierarchy indexes
Showing SQL execution Plan in MSSMS



Last updated
Was this helpful?

