sync
This commit is contained in:
@@ -85,21 +85,37 @@ WHERE f.type_desc IN (
|
|||||||
ORDER BY [d2].[row_size_mb] DESC, d.name DESC, f.name ASC ;
|
ORDER BY [d2].[row_size_mb] DESC, d.name DESC, f.name ASC ;
|
||||||
|
|
||||||
--free disk space
|
--free disk space
|
||||||
SELECT DISTINCT
|
SELECT
|
||||||
CONVERT(VARCHAR(512), [b].[volume_mount_point]) AS [volume_mount_point],
|
CONVERT(VARCHAR(512), [b].[volume_mount_point]) AS [volume_mount_point],
|
||||||
CONVERT(VARCHAR(512), [b].[logical_volume_name]) AS [logical_volume_name],
|
CONVERT(VARCHAR(512), [b].[logical_volume_name]) AS [logical_volume_name],
|
||||||
CONVERT(
|
CONVERT(DECIMAL(18, 1), ROUND(((SUM(CONVERT(FLOAT, [b].[available_bytes])) / SUM(CONVERT(FLOAT, [b].[total_bytes]))) * 100), 1)) AS [percent_free],
|
||||||
DECIMAL(18, 1),
|
CONVERT(BIGINT, ROUND(((SUM([b].[available_bytes]) / 1024.0) / 1024.0 / 1024.0), 0)) AS [free_gb],
|
||||||
ROUND(((CONVERT(FLOAT, [b].[available_bytes]) / CONVERT(FLOAT, [b].[total_bytes])) * 100), 1)) AS [percent_free],
|
CONVERT(BIGINT, ROUND(((SUM([b].[available_bytes]) / 1024.0) / 1024.0), 0)) AS [free_mb],
|
||||||
CONVERT(BIGINT, ROUND((([b].[available_bytes] / 1024.0) / 1024.0 / 1024.0), 0)) AS [free_gb],
|
CONVERT(BIGINT, ROUND(((SUM([b].[total_bytes]) / 1024.0) / 1024.0 / 1024.0), 0)) AS [total_gb],
|
||||||
CONVERT(BIGINT, ROUND((([b].[available_bytes] / 1024.0) / 1024.0 ), 0)) AS [free_mb],
|
CONVERT(BIGINT, ROUND((((SUM([b].[total_bytes] - [b].[available_bytes])) / 1024.0) / 1024.0 / 1024.0), 0)) AS [used_gb],
|
||||||
CONVERT(BIGINT, ROUND((([b].[total_bytes] / 1024.0) / 1024.0 / 1024.0), 0)) AS [total_gb],
|
CONVERT(BIGINT, ROUND(((SUM([b].[total_bytes]) / 1024.0) / 1024.0), 0)) / 100 * 5 / 1024.0 AS [5% space in Go is],
|
||||||
CONVERT(BIGINT, ROUND(((([b].[total_bytes] - [b].[available_bytes]) / 1024.0) / 1024.0 / 1024.0), 0)) AS [used_gb],
|
CONVERT(BIGINT, ROUND(((SUM([b].[total_bytes]) / 1024.0) / 1024.0), 0)) / 100 * 10 / 1024.0 AS [10% space in Go is],
|
||||||
CONVERT(BIGINT, ROUND((([b].[total_bytes] / 1024.0) / 1024.0), 0)) / 100 * 5 / 1024.0 AS [5% space in Go is],
|
CONVERT(BIGINT, ROUND(((SUM([b].[total_bytes]) / 1024.0) / 1024.0), 0)) / 100 * 15 / 1024.0 AS [15% space in Go is],
|
||||||
CONVERT(BIGINT, ROUND((([b].[total_bytes] / 1024.0) / 1024.0), 0)) / 100 * 10 / 1024.0 AS [10% space in Go is],
|
|
||||||
CONVERT(BIGINT, ROUND((([b].[total_bytes] / 1024.0) / 1024.0), 0)) / 100 * 15 / 1024.0 AS [15% space in Go is],
|
|
||||||
CURRENT_TIMESTAMP AS now,
|
CURRENT_TIMESTAMP AS now,
|
||||||
REPLACE(@@SERVERNAME, '\apssql', '') AS srvName
|
REPLACE(@@SERVERNAME, '\apssql', '') AS srvName
|
||||||
FROM sys.master_files AS [a]
|
FROM sys.master_files AS [a]
|
||||||
CROSS APPLY sys.dm_os_volume_stats(a.database_id, a.[file_id]) AS [b]
|
CROSS APPLY (
|
||||||
ORDER BY [percent_free] ASC;
|
SELECT [x].[database_id],
|
||||||
|
[x].[file_id],
|
||||||
|
[x].[volume_mount_point],
|
||||||
|
[x].[volume_id],
|
||||||
|
[x].[logical_volume_name],
|
||||||
|
[x].[file_system_type],
|
||||||
|
[x].[total_bytes],
|
||||||
|
[x].[available_bytes],
|
||||||
|
[x].[supports_compression],
|
||||||
|
[x].[supports_alternate_streams],
|
||||||
|
[x].[supports_sparse_files],
|
||||||
|
[x].[is_read_only],
|
||||||
|
[x].[is_compressed],
|
||||||
|
ROW_NUMBER() OVER (PARTITION BY [x].[volume_mount_point]
|
||||||
|
ORDER BY [x].[volume_mount_point] DESC) AS rnk
|
||||||
|
FROM sys.dm_os_volume_stats(a.database_id, a.[file_id]) x ) b
|
||||||
|
WHERE [b].[rnk] = 1
|
||||||
|
GROUP BY [b].[logical_volume_name], [b].[volume_mount_point]
|
||||||
|
ORDER BY [b].[volume_mount_point] ASC;
|
||||||
8
paul_snippets/Admin/Backup_Database.sql
Normal file
8
paul_snippets/Admin/Backup_Database.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
USE MASTER
|
||||||
|
GO
|
||||||
|
|
||||||
|
DECLARE @db NVARCHAR(100) = ''
|
||||||
|
|
||||||
|
EXECUTE [master].dbo.p_DbTool__BackUp_Database @debugMode = 0, @databaseName = @db
|
||||||
|
|
||||||
|
-- EXECUTE [master].dbo.p_DbTool__Restore_DB_from_Backup 0, ''
|
||||||
273
paul_snippets/Admin/Database_Create.sql
Normal file
273
paul_snippets/Admin/Database_Create.sql
Normal file
@@ -0,0 +1,273 @@
|
|||||||
|
USE [master]
|
||||||
|
GO
|
||||||
|
|
||||||
|
BEGIN TRY
|
||||||
|
-- must set database name, number of data files and data file size
|
||||||
|
-- database name
|
||||||
|
DECLARE @databaseName NVARCHAR(100) = 'some data base'
|
||||||
|
|
||||||
|
-- number of data files
|
||||||
|
DECLARE @numberDataFiles TINYINT = 2
|
||||||
|
-- normally should not have LESS then 2 data files
|
||||||
|
|
||||||
|
-- size of data files
|
||||||
|
DECLARE @ndfSize DECIMAL(6, 3) = 2
|
||||||
|
-- allowed sizes: 0.125, 0.25, 0.5, 1.0, 2.0, 3.0, 4.0
|
||||||
|
|
||||||
|
|
||||||
|
-- set to one to enable filestream
|
||||||
|
DECLARE @withFileStream BIT = 0
|
||||||
|
-- allowed values 0 or 1 - default=0 (no filestream)
|
||||||
|
|
||||||
|
-- if using database switching then set hasSwitch=1
|
||||||
|
-- uses database-switching and snapshot - default=FALSE - on TRUE will generate script for two databases (__00 & __01) plus snapshot
|
||||||
|
DECLARE @hasSwitch BIT = 0
|
||||||
|
|
||||||
|
|
||||||
|
-- ensure ndf file size is allowed
|
||||||
|
IF NOT (@ndfSize IN (0.125, 0.25, 0.5, 1.0, 2.0, 3.0, 4.0))
|
||||||
|
BEGIN
|
||||||
|
DECLARE @x VARCHAR(10) = CAST(@ndfSize AS VARCHAR(10))
|
||||||
|
RAISERROR ('.ndf File Size of %s is NOT an allowed value for ndfSize - cannot continue! [allowed: 0.125, 0.25, 0.5, 1.0, 2.2, 3.0, 4.0]', 14, 2, @x);
|
||||||
|
END
|
||||||
|
|
||||||
|
-- trim and remove square brackets [] from databaseName
|
||||||
|
SET @databaseName = LTRIM(RTRIM(REPLACE(REPLACE(@databaseName, '[', ''), ']', '')))
|
||||||
|
|
||||||
|
|
||||||
|
-- script vars
|
||||||
|
DECLARE @s CHAR(4) = ' ' -- spacer for indents
|
||||||
|
DECLARE @dataDir NVARCHAR(200) = ( SELECT PropertyValue FROM [master].dbo.fn_List_ServerProperties() WHERE PropertyName = 'Data_Directory' )
|
||||||
|
DECLARE @LogDir NVARCHAR(200) = ( SELECT PropertyValue FROM [master].dbo.fn_List_ServerProperties() WHERE PropertyName = 'Log_Directory' )
|
||||||
|
DECLARE @fsDir NVARCHAR(200) = ( SELECT PropertyValue FROM [master].dbo.fn_List_ServerProperties() WHERE PropertyName = 'Filestream_Directory' )
|
||||||
|
DECLARE @snapshotDir NVARCHAR(200) = ( SELECT PropertyValue FROM [master].dbo.fn_List_ServerProperties() WHERE PropertyName = 'Snapshot_Directory' )
|
||||||
|
DECLARE @gb INT = 1024
|
||||||
|
-- file size as string
|
||||||
|
DECLARE @nSize NVARCHAR(10) = CAST(CAST((@gb * @ndfSize) AS INT) AS NVARCHAR(10)) + 'MB'
|
||||||
|
-- file growth based on file size: if greater than 256MB (0.25) then 512MB else 128MB
|
||||||
|
DECLARE @fileGrowth NVARCHAR(10) = CASE WHEN (@ndfSize > 0.25) THEN '512MB' ELSE '128MB' END
|
||||||
|
|
||||||
|
|
||||||
|
-- table to hold all sql statements
|
||||||
|
DECLARE @tbl TABLE (Tbl_PK INT IDENTITY (1, 1) NOT NULL, SqlString NVARCHAR(MAX) NOT NULL, ForSwitch BIT DEFAULT (1))
|
||||||
|
|
||||||
|
|
||||||
|
-- add USE MASTER to sqlTable
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '/* create database ' + @databaseName + ' */'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'USE [master]'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'GO'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
|
||||||
|
|
||||||
|
-- script test for existing DB
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'IF EXISTS ( SELECT * FROM sys.databases WHERE name = ''' + @databaseName + ''' )'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ' BEGIN'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'RAISERROR (''ERROR: Database [%s] already exists on this server - cannot continue!'', 10, 1, ''' + @databaseName + ''')'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ' END'
|
||||||
|
|
||||||
|
|
||||||
|
-- script else create database
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'ELSE'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ' BEGIN'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'CREATE DATABASE [' + @databaseName + ']'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'ON PRIMARY'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + @s + '(NAME = ' + @databaseName + '__primary, FILENAME = ''' + @dataDir + '\' + @databaseName + '__primary.mdf'', SIZE = 16MB, MAXSIZE = UNLIMITED, FILEGROWTH = 16MB),'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
|
||||||
|
-- ndf files
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'FILEGROUP DATA DEFAULT'
|
||||||
|
+ @s + ' -- sizes -- 128MB -- 256MB -- 512MB' + ' -- ' + CAST(@gb AS NVARCHAR(10)) + 'MB' + ' -- ' + CAST(@gb * 2 AS NVARCHAR(10)) + 'MB'
|
||||||
|
+ ' -- ' + CAST(@gb * 3 AS NVARCHAR(10)) + 'MB' + ' -- ' + CAST(@gb * 4 AS NVARCHAR(10)) + 'MB'
|
||||||
|
+ ' -- ' + CAST(@gb * 5 AS NVARCHAR(10)) + 'MB' + ' -- ' + CAST(@gb * 6 AS NVARCHAR(10)) + 'MB'
|
||||||
|
+ ' -- ' + CAST(@gb * 7 AS NVARCHAR(10)) + 'MB' + ' -- ' + CAST(@gb * 8 AS NVARCHAR(10)) + 'MB'
|
||||||
|
|
||||||
|
-- add data files for default filegroup "DATA"
|
||||||
|
DECLARE @i INT = 1
|
||||||
|
WHILE @i <= @numberDataFiles
|
||||||
|
BEGIN
|
||||||
|
-- data file
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + @s + @s + '(NAME = ' + @databaseName + '__data_' + CAST(@i AS NVARCHAR(10))
|
||||||
|
+ ', FILENAME = ''' + @dataDir + '\' + @databaseName + '__data_' + CAST(@i AS NVARCHAR(10)) + '.ndf'','
|
||||||
|
+ ' SIZE = ' + @nSize + ', MAXSIZE = UNLIMITED, FILEGROWTH = ' + @fileGrowth + ')'
|
||||||
|
+ CASE WHEN (@i < @numberDataFiles) THEN ',' ELSE '' END
|
||||||
|
-- incremetn counter i
|
||||||
|
SET @i += 1
|
||||||
|
END
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
|
||||||
|
|
||||||
|
-- filestream if needed
|
||||||
|
IF @withFileStream = 0
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + '-- Un-Comment if FILESTREAM is needed'
|
||||||
|
END
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + CASE WHEN @withFileStream = 0 THEN '--' ELSE '' END + ','
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + CASE WHEN @withFileStream = 0 THEN '--' ELSE '' END + 'FILEGROUP [FILESTREAM] CONTAINS FILESTREAM DEFAULT'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + CASE WHEN @withFileStream = 0 THEN '--' ELSE '' END + @s + '(NAME = ' + @databaseName + '__fs, FILENAME = ''' + @fsDir + '\' + @databaseName + '__fs'')'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
|
||||||
|
-- log file
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'LOG ON'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + @s + '(NAME = ' + @databaseName + '__log,'
|
||||||
|
+ ' FILENAME = ''' + @logDir + '\' + @databaseName + '__log.ldf'','
|
||||||
|
+ ' SIZE = ' + @nSize + ',' + ' MAXSIZE = UNLIMITED,'
|
||||||
|
+ ' FILEGROWTH = ' + @fileGrowth + ')'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
|
||||||
|
-- set collation to CI/AS
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'COLLATE Latin1_General_CI_AS'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ' END'
|
||||||
|
|
||||||
|
-- print results
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'PRINT ''DB [' + @databaseName + '] created'''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'GO'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
|
||||||
|
-- set dbOwner to sa
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '-- set dbOwner on created databases', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'USE [' + @databaseName + CASE WHEN (@hasSwitch = 1) THEN '__00' ELSE '' END + ']', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'EXECUTE sp_changedbowner @loginame = ''sa'', @map = false', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
IF (@hasSwitch = 1)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'USE [' + @databaseName + '__01]', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'EXECUTE sp_changedbowner @loginame = ''sa'', @map = false', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
-- set RecoveryModel to SIMPLE
|
||||||
|
--'ALTER DATABASE [' + Name + '] SET RECOVERY SIMPLE WITH NO_WAIT'
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '-- set RecoveryModel to SIMPLE on created databases', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'USE [' + @databaseName + CASE WHEN (@hasSwitch = 1) THEN '__00' ELSE '' END + ']', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'ALTER DATABASE [' + @databaseName + CASE WHEN (@hasSwitch = 1) THEN '__00' ELSE '' END + '] SET RECOVERY SIMPLE WITH NO_WAIT', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
IF (@hasSwitch = 1)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'USE [' + @databaseName + '__01]', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'ALTER DATABASE [' + @databaseName + '__01] SET RECOVERY SIMPLE WITH NO_WAIT', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
END
|
||||||
|
|
||||||
|
-- set compatibility to SQL2017 (140)
|
||||||
|
--'ALTER DATABASE [' + Name + '] SET COMPATIBILITY_LEVEL = 140'
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '-- set compatibility to SQL2017 (140) on created databases', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'USE [' + @databaseName + CASE WHEN (@hasSwitch = 1) THEN '__00' ELSE '' END + ']', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'ALTER DATABASE [' + @databaseName + CASE WHEN (@hasSwitch = 1) THEN '__00' ELSE '' END + '] SET COMPATIBILITY_LEVEL = 140', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
IF (@hasSwitch = 1)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'USE [' + @databaseName + '__01]', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'ALTER DATABASE [' + @databaseName + '__01] SET COMPATIBILITY_LEVEL = 140', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- snapshot if needed
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '/* script for ' + @databaseName + ' snapshot' + CASE WHEN (@hasSwitch = 1) THEN ' */' ELSE '' END, 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'USE [master]', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'IF EXISTS (SELECT name FROM sys.databases WHERE name = ''' + @databaseName + ''')', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT ' BEGIN', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT @s + 'DROP DATABASE ' + @databaseName, 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT ' END', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'CREATE DATABASE ' + @databaseName, 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT @s + 'ON', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT @s + @s + '(NAME = ' + @databaseName + CASE WHEN (@hasSwitch = 1) THEN '__00' ELSE '' END + '__primary, FILENAME = ''' + @snapshotDir + '\' + @databaseName + '.ss''),', 0
|
||||||
|
|
||||||
|
-- add snapshot data file for each datafile
|
||||||
|
SET @i = 1
|
||||||
|
WHILE @i <= @numberDataFiles
|
||||||
|
BEGIN
|
||||||
|
-- data file
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch)
|
||||||
|
SELECT @s + @s + '(NAME = ' + @databaseName + CASE WHEN (@hasSwitch = 1) THEN '__00' ELSE '' END + '__data_' + CAST(@i AS NVARCHAR(10)) + ','
|
||||||
|
+ ' FILENAME = ''' + @snapshotDir + '\' + @databaseName + '_' + CAST(@i AS NVARCHAR(10)) + '.ss'')'
|
||||||
|
+ CASE WHEN (@i < @numberDataFiles) THEN ',' ELSE '' END, 0
|
||||||
|
-- incremetn counter i
|
||||||
|
SET @i += 1
|
||||||
|
END
|
||||||
|
|
||||||
|
-- finish snapshot
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT @s + 'AS SNAPSHOT OF ' + @databaseName + CASE WHEN (@hasSwitch = 1) THEN '__00' ELSE '' END, 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
-- print switch/snapshot results
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'PRINT ''SNAPSHOT [' + @databaseName + '] created''', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
-- end comment if not switching
|
||||||
|
IF (@hasSwitch = 0)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '*/', 0
|
||||||
|
END
|
||||||
|
|
||||||
|
-- print results
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'USE [master]', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'GO', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '/* generated script for:', 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT 'CREATE DATABASE ' + @databaseName + CASE WHEN (@hasSwitch = 1) THEN ' __00 __01 & snapshot' ELSE '' END, 0
|
||||||
|
INSERT INTO @tbl (SqlString, ForSwitch) SELECT '*/', 0
|
||||||
|
|
||||||
|
|
||||||
|
-- return all SQL strings - if hasSwitch=TRUE then select forSwitch records twice (with each name) else only select once
|
||||||
|
IF (@hasSwitch = 0)
|
||||||
|
BEGIN
|
||||||
|
SELECT SqlString FROM @tbl ORDER BY Tbl_PK
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
BEGIN
|
||||||
|
SELECT SqlString
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
-- for db __00
|
||||||
|
SELECT REPLACE(SqlString, @databaseName, @databaseName + '__00') AS SqlString, 1 AS SortOrder, Tbl_PK
|
||||||
|
FROM @tbl WHERE ForSwitch = 1
|
||||||
|
-- for db __00
|
||||||
|
UNION ALL
|
||||||
|
-- for db __01
|
||||||
|
SELECT REPLACE(SqlString, @databaseName, @databaseName + '__01') AS SqlString, 2 AS SortOrder, Tbl_PK
|
||||||
|
FROM @tbl WHERE ForSwitch = 1
|
||||||
|
-- for db __01
|
||||||
|
UNION ALL
|
||||||
|
-- for snapshot
|
||||||
|
SELECT SqlString, 3 AS SortOrder, Tbl_PK FROM @tbl WHERE ForSwitch = 0
|
||||||
|
-- for snapshot
|
||||||
|
) s
|
||||||
|
ORDER BY SortOrder, Tbl_PK
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
------ return file directories for proofing
|
||||||
|
----SELECT @dataDir AS Data_Directory, @LogDir AS Log_Directory, @fsDir AS Filestream_Directory, @snapshotDir AS Snapshot_Directory
|
||||||
|
|
||||||
|
END TRY
|
||||||
|
|
||||||
|
BEGIN CATCH
|
||||||
|
EXECUTE [master].dbo.sp_RethrowError
|
||||||
|
END CATCH
|
||||||
641
paul_snippets/Admin/Script_DataCopy.sql
Normal file
641
paul_snippets/Admin/Script_DataCopy.sql
Normal file
@@ -0,0 +1,641 @@
|
|||||||
|
/*
|
||||||
|
To use this script-builder:
|
||||||
|
1. connect to target server - location of target database
|
||||||
|
|
||||||
|
2. write target database name in "USE DATABASE" statement
|
||||||
|
script-builder expects source and target database names to be identical - modify created script if this is not correct
|
||||||
|
|
||||||
|
3. set required variables: sourceServer and targetServer
|
||||||
|
|
||||||
|
4. set optional variables as desired:
|
||||||
|
a. tablePatternExclude: will not remove and not copy data for tables where name starts with this pattern, default='' no tables are excluded
|
||||||
|
b. tablePatternDoNotCopy: will remove target data but not copy source for tables where name starts with this pattern, default='' all tables copied
|
||||||
|
c. writeToLapampa: writes job start/end/fail to laPampa, default=0 no laPampa functions scripted
|
||||||
|
d. serverTest: test to ensure running on sourceServer, default=1 test for sourceServer
|
||||||
|
e. scriptBigCopy: generates customizable script for copying large tables in small blocks, default=0
|
||||||
|
|
||||||
|
5. execute script-builder
|
||||||
|
|
||||||
|
6. copy all resulting lines to new query window
|
||||||
|
|
||||||
|
7. review script before executing: modify as needed...
|
||||||
|
|
||||||
|
can execute generated script, save for later use, modify to become stored procedure, use as sqlJob step, more...
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- REQUIRED "USE DATABASE statement: set databaseName - basis for generated script:
|
||||||
|
USE SL2007
|
||||||
|
GO
|
||||||
|
|
||||||
|
/* if database is ProductCompendium
|
||||||
|
then have to delete from COM_AppUser and COM_DbUser twice: 2nd time immediately before filling */
|
||||||
|
|
||||||
|
SET NOCOUNT ON
|
||||||
|
|
||||||
|
|
||||||
|
-- REQUIRED variables - MUST SET THESE VARIABLSE
|
||||||
|
DECLARE @sourceServer NVARCHAR(100) = 'PRODDB', -- set sourceServer from \ServerObjects\LinkedServers - data source
|
||||||
|
@targetServer NVARCHAR(100) = 'SWMDATASQLINT01' -- target server - where the copy MUST run
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- optional variables - use carefully
|
||||||
|
DECLARE @tablePatternExclude NVARCHAR(100) = NULL, -- set tableName-Pattern NOT to delete and NOT to copy data - use VERY CAREFULLY!
|
||||||
|
@tablePatternDoNotCopy NVARCHAR(100) = NULL, -- set tableName-Pattern to delete but NOT copy data - use VERY CAREFULLY!
|
||||||
|
@writeToLapampa BIT = 1, -- if true will include logging in LaPampa
|
||||||
|
@serverTest BIT = 1, -- if true validates server
|
||||||
|
@scriptBigCopy BIT = 0, -- if true writes sql to copy big tables in small blocks
|
||||||
|
@jobDbLocal BIT = 1 -- if false adds 'PRODUCTION_DATA' as linked server for executing job procs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- scripting variables - DO NOT CHANGE
|
||||||
|
DECLARE @databaseName NVARCHAR(100) = DB_NAME(), -- gets database name from "USE DATABASE" statement
|
||||||
|
@s CHAR(4) = ' ', -- spacer for indents (formatting)
|
||||||
|
@jobSrvr NVARCHAR(100) -- location of job db
|
||||||
|
= CASE WHEN (@jobDbLocal = 1) THEN N'' ELSE N'' END
|
||||||
|
|
||||||
|
-- enclose dbName in []
|
||||||
|
SET @databaseName = '[' + LTRIM(RTRIM(REPLACE(REPLACE(@databaseName, '[', ''), ']', ''))) + ']'
|
||||||
|
|
||||||
|
-- table to hold all sql statements
|
||||||
|
DECLARE @tbl TABLE (Tbl_PK INT IDENTITY (1, 1) NOT NULL, SqlString NVARCHAR(MAX) NOT NULL, NoTab BIT NULL)
|
||||||
|
|
||||||
|
-- add USE DATABASE to sqlTable
|
||||||
|
INSERT INTO @tbl (SqlString, NoTab) SELECT 'USE ' + @databaseName, 1
|
||||||
|
INSERT INTO @tbl (SqlString, NoTab) SELECT 'GO', 1
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
-------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
building stop/start temporal tables here
|
||||||
|
*/
|
||||||
|
-- table for all temporal table details
|
||||||
|
DECLARE @histTbl TABLE (DataTable NVARCHAR(256) NOT NULL, HistoryTable NVARCHAR(256) NOT NULL,
|
||||||
|
SysVerCMD NVARCHAR(256) NOT NULL, CMD VARCHAR(10), SortNr INT NOT NULL,
|
||||||
|
CmdNr INT, PRIMARY KEY (DataTable, SortNr, CmdNr))
|
||||||
|
INSERT INTO @histTbl (DataTable, SortNr, HistoryTable, SysVerCMD, CMD, CmdNr)
|
||||||
|
SELECT
|
||||||
|
schema_name(t.schema_id) + '.' + t.name AS DataTable, sv.SortNr,
|
||||||
|
schema_name(h.schema_id) + '.' + h.name AS HistoryTable,
|
||||||
|
'ALTER TABLE ' + schema_name(t.schema_id) + '.' + t.name
|
||||||
|
+ CASE WHEN (CmdNr = 1) THEN ' SET ( SYSTEM_VERSIONING = ' + sv.SysVer
|
||||||
|
+ CASE WHEN (sv.SysVer = 'OFF') THEN '' ELSE ' ( HISTORY_TABLE = ' + schema_name(h.schema_id) + '.' + h.name + ' )' END + ' )'
|
||||||
|
ELSE CASE WHEN (sv.SysVer = 'OFF') THEN ' DROP PERIOD FOR SYSTEM_TIME' ELSE ' ADD PERIOD FOR SYSTEM_TIME (ValidFromDt, ValidToDt)' END END + ';' AS SysVerCMD,
|
||||||
|
sv.SysVer AS CMD, CmdNr
|
||||||
|
FROM sys.tables t
|
||||||
|
LEFT OUTER JOIN sys.tables h ON t.history_table_id = h.object_id
|
||||||
|
CROSS JOIN ( SELECT 'OFF' AS SysVer, 1 AS SortNr UNION SELECT 'ON' AS SysVer, 2 AS SortNr ) sv
|
||||||
|
CROSS JOIN ( SELECT 1 AS CmdNr UNION SELECT 2 AS CmdNr ) sn
|
||||||
|
WHERE t.temporal_type = 2
|
||||||
|
|
||||||
|
-- temporal tables
|
||||||
|
IF EXISTS ( SELECT * FROM @histTbl )
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
-- start separate section for temporal tables
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '/* special section for TEMPORAL TABLES'
|
||||||
|
-- stop temporal tables: SET SYSTEM_VERSIONING = OFF
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '-- stop temporal tables: SET SYSTEM_VERSIONING = OFF'
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT SysVerCMD FROM @histTbl WHERE CMD = 'OFF'
|
||||||
|
ORDER BY DataTable, CmdNr
|
||||||
|
-- close special section for temporal tables
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'GO'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '*/'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
END
|
||||||
|
|
||||||
|
/*
|
||||||
|
building stop/start temporal tables here
|
||||||
|
-------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
-- BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString, NoTab) SELECT ' BEGIN', 1
|
||||||
|
|
||||||
|
-- set nocount ON
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'SET NOCOUNT ON'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'SET QUOTED_IDENTIFIER ON'
|
||||||
|
|
||||||
|
-- job vars
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '-- script vars'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'DECLARE @min INT, @max INT, @step INT'
|
||||||
|
|
||||||
|
|
||||||
|
IF (@scriptBigCopy = 1)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '-- copy very large table in small blocks...'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '/*'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'SET IDENTITY_INSERT [] ON'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- get min/max/step values'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'SET @min = ( SELECT MIN([PK]) FROM )'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'SET @max = ( SELECT MAX([PK]) FROM )'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'SET @step = 2500'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- for each min: insert records'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'WHILE @min <= @max'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + ' BEGIN'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'INSERT INTO '
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + '()'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'SELECT '
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'FROM '
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'WHERE [PK] BETWEEN @min AND @min + @step - 1'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + '-- set next min'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'SET @min = @min + @step'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + ' END'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'SET IDENTITY_INSERT [] OFF'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '*/'
|
||||||
|
END
|
||||||
|
|
||||||
|
-- log job start
|
||||||
|
IF (@writeToLapampa = 1)
|
||||||
|
BEGIN
|
||||||
|
DECLARE @srcSrvr NVARCHAR(100) = @sourceServer--CASE WHEN (LEFT(@sourceServer,
|
||||||
|
DECLARE @trgtSrvr NVARCHAR(100) = @targetServer
|
||||||
|
DECLARE @jobName NVARCHAR(100) = REPLACE(REPLACE(@databaseName, '[', ''), ']', '') + '__copy' + '_from__' + @srcSrvr + '__to__IntDB'-- + @trgtSrvr
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '-- laPampa JobName'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'DECLARE @jobName NVARCHAR(100) = ''' + @jobName + ''''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '-- log job start'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'EXECUTE ' + @jobSrvr + 'JOB.dbo.sp_job_start @jobName, null, null, ''Started'''
|
||||||
|
END
|
||||||
|
|
||||||
|
-- BEGIN TRY
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'BEGIN TRY'
|
||||||
|
-- ensure running on specified server
|
||||||
|
IF (@serverTest = 1)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- ensure run from ' + @targetServer
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'IF NOT (@@SERVERNAME = ''' + @targetServer + ''')'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'RAISERROR (''DATABASE SERVER NOT VALID! CANNOT RUN ON %s !!'', 16, 1, @@SERVERNAME)'
|
||||||
|
END
|
||||||
|
|
||||||
|
-- ensure running on specified database
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- ensure run on database ' + @databaseName
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'IF NOT (DB_NAME() = ''' + REPLACE(REPLACE(@databaseName, '[', ''), ']', '') + ''')'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + ' BEGIN'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'DECLARE @db NVARCHAR(128) = DB_NAME()'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'RAISERROR (''DATABASE NOT VALID! CANNOT RUN ON %s !!'', 16, 1, @db)'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + ' END'
|
||||||
|
|
||||||
|
|
||||||
|
-- prep for data copy: disable triggers and constraints, stop temporal tables
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- prep for data copy: disable triggers and/or constraints here...'
|
||||||
|
|
||||||
|
|
||||||
|
-- table to hold all PK-FK relations EXCEPT self-refernecing relations
|
||||||
|
DECLARE @tableList TABLE (tl_PK INT IDENTITY(1, 1) NOT NULL, PkTable NVARCHAR(100), PkTableId INT, FkTable NVARCHAR(100), FkTableId INT)
|
||||||
|
INSERT INTO @tableList
|
||||||
|
(PkTable, PkTableId, FkTable, FkTableId)
|
||||||
|
SELECT
|
||||||
|
ISNULL(p.name, '') AS PkTable,
|
||||||
|
ISNULL(p.object_id, 0) AS PkTableId,
|
||||||
|
r.name AS FkTable,
|
||||||
|
r.object_id AS FkTableId
|
||||||
|
FROM sys.tables r
|
||||||
|
LEFT OUTER JOIN sys.foreign_keys f
|
||||||
|
ON r.object_id = f.parent_object_id
|
||||||
|
LEFT OUTER JOIN sys.tables p
|
||||||
|
ON f.referenced_object_id = p.object_id
|
||||||
|
AND (NOT ISNULL(p.object_id, 0) = r.object_id)
|
||||||
|
|
||||||
|
-- table to hold all table names with relations hierarchy
|
||||||
|
DECLARE @tableMap TABLE (tm_PK INT IDENTITY(1, 1) NOT NULL, TblSchema NVARCHAR(100), TableName NVARCHAR(200), TableId INT, RelationLevel INT, IsPK BIT, HasCLR BIT)
|
||||||
|
INSERT INTO @tableMap
|
||||||
|
(TblSchema, TableName, TableId, RelationLevel, IsPK, HasCLR)
|
||||||
|
SELECT
|
||||||
|
'['+ SCHEMA_NAME(t.schema_id) + ']' AS TblSchema,
|
||||||
|
t.name AS TableName,
|
||||||
|
object_id AS TableId,
|
||||||
|
0 AS RelationLevel,
|
||||||
|
CASE WHEN name IN ( SELECT PkTable FROM @tableList ) THEN 1 ELSE 0 END
|
||||||
|
AS IsPK,
|
||||||
|
CASE
|
||||||
|
WHEN EXISTS ( SELECT system_type_id FROM sys.columns c WHERE c.object_id = t.object_id AND system_type_id IN (240, 241) ) -- 240=CLR DataType, 241=XML
|
||||||
|
THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END AS HasCLR
|
||||||
|
FROM sys.tables t
|
||||||
|
WHERE NOT (name IN ('sysdiagrams'))
|
||||||
|
AND NOT (name LIKE ISNULL(@tablePatternExclude, '#!#') + '%')
|
||||||
|
|
||||||
|
-- varibles for processing
|
||||||
|
DECLARE @relLevel INT = 0, @hasRels BIT = 1
|
||||||
|
|
||||||
|
-- loop through all tables until no more relations are found OR reach max loop (to avoid endless looping)
|
||||||
|
WHILE @hasRels = 1 AND @relLevel < 100
|
||||||
|
BEGIN
|
||||||
|
-- update table map with all relations that exist at current level
|
||||||
|
UPDATE @tableMap
|
||||||
|
SET RelationLevel = RelationLevel + 1
|
||||||
|
-- where table with FK is on or below current level
|
||||||
|
WHERE TableId IN ( SELECT FkTableId FROM @tableMap tm
|
||||||
|
INNER JOIN @tableList tl ON tm.TableId = tl.FkTableId
|
||||||
|
WHERE RelationLevel <= @relLevel)
|
||||||
|
-- table with PK is on current level
|
||||||
|
AND TableId IN ( SELECT PkTableId FROM @tableMap tm
|
||||||
|
INNER JOIN @tableList tl ON tm.TableId = tl.FkTableId
|
||||||
|
WHERE RelationLevel = @relLevel)
|
||||||
|
-- if no records found for current level then set exit variable
|
||||||
|
IF @@ROWCOUNT = 0
|
||||||
|
BEGIN
|
||||||
|
-- relations found at current level = FALSE
|
||||||
|
SET @hasRels = 0
|
||||||
|
END
|
||||||
|
|
||||||
|
-- move to next level
|
||||||
|
SET @relLevel = @relLevel + 1
|
||||||
|
END
|
||||||
|
|
||||||
|
-- table to hold all where clauses for referential integrety
|
||||||
|
DECLARE @tableFKs TABLE (TableName NVARCHAR(100), FkNr INT, SqlText NVARCHAR(1000))
|
||||||
|
INSERT INTO @tableFKs (TableName, FkNr, SqlText)
|
||||||
|
SELECT FkTbl AS TableName, FkNr, Whr AS SqlText
|
||||||
|
FROM
|
||||||
|
( SELECT
|
||||||
|
ROW_NUMBER() OVER(PARTITION BY ft.name ORDER BY fk.parent_column_id) AS FkNr,
|
||||||
|
f.name AS FkConstraint,
|
||||||
|
CASE WHEN ((ROW_NUMBER() OVER(PARTITION BY ft.name ORDER BY fk.parent_column_id)) = 1) THEN 'WHERE ' ELSE ' AND ' END
|
||||||
|
+ '[' + fc.name + '] IN ( SELECT [' + pc.name + '] FROM [' + ps.name + '].[' + pt.name + '] )'
|
||||||
|
AS Whr,
|
||||||
|
ft.name AS FkTbl,
|
||||||
|
fc.name AS FkCol,
|
||||||
|
fc.column_id AS FkColId,
|
||||||
|
pt.name AS PkTbl,
|
||||||
|
pc.name AS PkCol,
|
||||||
|
pc.column_id AS PkColId
|
||||||
|
FROM sys.tables ft
|
||||||
|
INNER JOIN sys.foreign_key_columns fk
|
||||||
|
ON ft.object_id = fk.parent_object_id
|
||||||
|
INNER JOIN sys.foreign_keys f
|
||||||
|
ON fk.constraint_object_id = f.object_id
|
||||||
|
INNER JOIN sys.columns fc
|
||||||
|
ON fk.parent_object_id = fc.object_id
|
||||||
|
AND fk.parent_column_id = fc.column_id
|
||||||
|
AND fc.is_nullable = 0
|
||||||
|
INNER JOIN sys.tables pt
|
||||||
|
ON fk.referenced_object_id = pt.object_id
|
||||||
|
AND NOT (ft.name = pt.name) -- remove self-referencing foreign-keys
|
||||||
|
INNER JOIN sys.schemas ps
|
||||||
|
ON pt.schema_id = ps.schema_id
|
||||||
|
INNER JOIN sys.columns pc
|
||||||
|
ON fk.referenced_object_id = pc.object_id
|
||||||
|
AND fk.referenced_column_id = pc.column_id
|
||||||
|
) fk
|
||||||
|
|
||||||
|
-- start delete section
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- remove data from all tables'
|
||||||
|
|
||||||
|
-- script all truncates
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + SqlStr
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
-- truncates...
|
||||||
|
SELECT
|
||||||
|
'TRUNCATE TABLE ' + tm.TblSchema + '.[' + TableName + ']'
|
||||||
|
AS SqlStr,
|
||||||
|
TableName AS TableName,
|
||||||
|
RelationLevel AS RelationLevel,
|
||||||
|
1 AS SqlOrder
|
||||||
|
FROM @tableMap tm
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
object_id AS TableId,
|
||||||
|
MAX(CAST(is_identity AS INT))
|
||||||
|
AS HasIdent
|
||||||
|
FROM sys.columns
|
||||||
|
GROUP BY object_id
|
||||||
|
) ci
|
||||||
|
ON tm.TableId = ci.TableId
|
||||||
|
WHERE ISNULL(IsPK, 0) = 0
|
||||||
|
-- truncates...
|
||||||
|
) delSql
|
||||||
|
ORDER BY RelationLevel ASC, TableName, SqlOrder
|
||||||
|
|
||||||
|
-- script all deletes - with dbcc checkident when needed
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + SqlStr
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
-- delete from...
|
||||||
|
SELECT
|
||||||
|
'DELETE FROM ' + tm.TblSchema + '.[' + TableName + ']'
|
||||||
|
AS SqlStr,
|
||||||
|
'[' + TableName + ']' AS TableName,
|
||||||
|
RelationLevel AS RelationLevel,
|
||||||
|
2 AS SqlOrder
|
||||||
|
FROM @tableMap tm
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
object_id AS TableId,
|
||||||
|
MAX(CAST(is_identity AS INT))
|
||||||
|
AS HasIdent
|
||||||
|
FROM sys.columns
|
||||||
|
GROUP BY object_id
|
||||||
|
) ci
|
||||||
|
ON tm.TableId = ci.TableId
|
||||||
|
WHERE ISNULL(IsPK, 0) = 1
|
||||||
|
-- delete from...
|
||||||
|
UNION ALL
|
||||||
|
-- dbcc checkident...
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
WHEN (ISNULL(HasIdent, 0) = 1 AND ISNULL(IsPK, 0) = 1)
|
||||||
|
THEN 'DBCC CHECKIDENT (''' + TblSchema + '.' + TableName + ''', RESEED, 0) WITH NO_INFOMSGS'
|
||||||
|
ELSE '-- Delete this line before executing script! --'
|
||||||
|
END AS SqlStr,
|
||||||
|
'[' + TableName + ']' AS TableName,
|
||||||
|
RelationLevel AS RelationLevel,
|
||||||
|
3 AS SqlOrder
|
||||||
|
FROM @tableMap tm
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
object_id AS TableId,
|
||||||
|
MAX(CAST(is_identity AS INT))
|
||||||
|
AS HasIdent
|
||||||
|
FROM sys.columns
|
||||||
|
GROUP BY object_id
|
||||||
|
) ci
|
||||||
|
ON tm.TableId = ci.TableId
|
||||||
|
WHERE ISNULL(IsPK, 0) = 1
|
||||||
|
-- dbcc checkident...
|
||||||
|
UNION ALL
|
||||||
|
-- blank line...
|
||||||
|
SELECT
|
||||||
|
'' AS SqlStr,
|
||||||
|
'[' + TableName + ']' AS TableName,
|
||||||
|
RelationLevel AS RelationLevel,
|
||||||
|
1 AS SqlOrder
|
||||||
|
FROM @tableMap tm
|
||||||
|
WHERE ISNULL(IsPK, 0) = 1
|
||||||
|
-- blank line...
|
||||||
|
) delSql
|
||||||
|
ORDER BY RelationLevel ASC, TableName, SqlOrder
|
||||||
|
|
||||||
|
-- end delete section
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- remove data from all tables'
|
||||||
|
|
||||||
|
|
||||||
|
-- start insert section
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- fill all tables from ' + @sourceServer
|
||||||
|
|
||||||
|
|
||||||
|
-- vars for insert into table...
|
||||||
|
DECLARE @tblSchema NVARCHAR(100), @tblName NVARCHAR(100), @colList NVARCHAR(MAX), @hasIdent BIT, @hasCLR BIT
|
||||||
|
DECLARE @cur CURSOR
|
||||||
|
|
||||||
|
|
||||||
|
-- insert into tables...
|
||||||
|
DECLARE @curCount INT = 0
|
||||||
|
SET @cur = CURSOR FAST_FORWARD FOR
|
||||||
|
SELECT
|
||||||
|
TblSchema, TblName, LEFT(ColumnList, LEN(ColumnList) -1) AS ColumnList, HasIdent, HasCLR
|
||||||
|
FROM
|
||||||
|
( SELECT TblSchema, '[' + t.name + ']' AS TblName, tm.RelationLevel AS TableOrder,
|
||||||
|
( SELECT '[' + name + '],' 'data()' FROM sys.columns c
|
||||||
|
WHERE t.object_id = c.object_id AND NOT (c.is_computed = 1) AND NOT (c.system_type_id = 189) /*not timestamp*/
|
||||||
|
ORDER BY column_id FOR XML PATH('') ) AS ColumnList,
|
||||||
|
ISNULL(( SELECT MAX(CAST(is_identity AS INT)) FROM sys.columns ci WHERE t.object_id = ci.object_id ), 0) AS HasIdent,
|
||||||
|
ISNULL(HasCLR, 0) AS HasCLR
|
||||||
|
FROM @tableMap tm
|
||||||
|
INNER JOIN sys.tables t ON tm.TableId = t.object_id ) tc
|
||||||
|
WHERE NOT (REPLACE(TblName, '[', '') LIKE (ISNULL(@tablePatternDoNotCopy, '#!#') + '%'))
|
||||||
|
ORDER BY TableOrder DESC, TblName
|
||||||
|
OPEN @cur
|
||||||
|
FETCH NEXT FROM @cur INTO @tblSchema, @tblName, @colList, @hasIdent, @hasCLR
|
||||||
|
WHILE @@FETCH_STATUS = 0
|
||||||
|
BEGIN
|
||||||
|
-- increment cursor loop counter
|
||||||
|
SET @curCount = @curCount + 1
|
||||||
|
|
||||||
|
-- two blank lines between tables - except for first time
|
||||||
|
IF (NOT (@curCount = 1))
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
END
|
||||||
|
|
||||||
|
-- set table name
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- ' + @tblName
|
||||||
|
-- set insIdent on
|
||||||
|
IF @hasIdent = 1
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + 'SET IDENTITY_INSERT ' + @tblSchema + '.' + @tblName + ' ON'
|
||||||
|
END
|
||||||
|
|
||||||
|
-- set insert into table
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + 'INSERT INTO ' + @tblSchema + '.' + @tblName
|
||||||
|
|
||||||
|
-- set columns to insert
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + @s + '(' + @colList + ')'
|
||||||
|
|
||||||
|
-- set columns for select
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + @s + 'SELECT ' + @colList
|
||||||
|
|
||||||
|
-- if not HasCLR then use normal FROM statement else use pass-through query
|
||||||
|
IF @hasCLR = 0
|
||||||
|
BEGIN
|
||||||
|
-- does NOT use CLR type
|
||||||
|
-- set From statement
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + @s + 'FROM ' + @sourceServer + '.' + @databaseName + '.' + @tblSchema + '.' + @tblName
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
BEGIN
|
||||||
|
-- uses CLR type
|
||||||
|
-- set pass-through From statement
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + @s + 'FROM OPENQUERY(' + @sourceServer + ', ''SELECT ' + @colList + ' FROM ' + @databaseName + '.' + @tblSchema + '.' + @tblName + ''')'
|
||||||
|
END
|
||||||
|
|
||||||
|
-- has foreign-key
|
||||||
|
IF EXISTS ( SELECT * FROM @tableFKs WHERE LTRIM(RTRIM(REPLACE(REPLACE(TableName, '[', ''), ']', ''))) =LTRIM(RTRIM(REPLACE(REPLACE( @tblName, '[', ''), ']', ''))) )
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + @s + SqlText FROM @tableFKs
|
||||||
|
WHERE LTRIM(RTRIM(REPLACE(REPLACE(TableName, '[', ''), ']', ''))) = LTRIM(RTRIM(REPLACE(REPLACE(@tblName, '[', ''), ']', '')))
|
||||||
|
ORDER BY FkNr ASC
|
||||||
|
END
|
||||||
|
|
||||||
|
-- set insIdent off
|
||||||
|
IF @hasIdent = 1
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT @s + 'SET IDENTITY_INSERT ' + @tblSchema + '.' + @tblName + ' OFF'
|
||||||
|
END
|
||||||
|
|
||||||
|
FETCH NEXT FROM @cur INTO @tblSchema, @tblName, @colList, @hasIdent, @hasCLR
|
||||||
|
END
|
||||||
|
CLOSE @cur
|
||||||
|
DEALLOCATE @cur
|
||||||
|
|
||||||
|
|
||||||
|
-- end insert section
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- fill all tables from ' + @sourceServer
|
||||||
|
|
||||||
|
|
||||||
|
-- cleanup for data copy: enable triggers and constraints, stop temporal tables
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- cleanup after data copy: enable triggers, constraints and/or temporal tables here...'
|
||||||
|
|
||||||
|
-- temporal tables
|
||||||
|
IF EXISTS ( SELECT * FROM @histTbl )
|
||||||
|
BEGIN
|
||||||
|
-- spacing
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
-- start temporal tables: SET SYSTEM_VERSIONING = ON
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '-- start temporal tables: SET SYSTEM_VERSIONING = ON, ADD PERIOD FOR SYSTEM_TIME'
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT SysVerCMD FROM @histTbl WHERE CMD = 'ON'
|
||||||
|
ORDER BY DataTable, CmdNr DESC
|
||||||
|
-- set GO
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'GO'
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
-- log job end - successful
|
||||||
|
IF (@writeToLapampa = 1)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ' -- log job end - successful'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ' EXECUTE ' + @jobSrvr + 'JOB.dbo.sp_job_end @jobName, ''Finished successfully'''
|
||||||
|
END
|
||||||
|
|
||||||
|
-- add END TRY, BEGIN/END CATCH & RetrhowError statements
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'END TRY'
|
||||||
|
-- END TRY
|
||||||
|
|
||||||
|
|
||||||
|
-- BEGIN CATCH
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'BEGIN CATCH'
|
||||||
|
|
||||||
|
-- rethrow error
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- rethrow error'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'EXECUTE [master].dbo.sp_RethrowError'
|
||||||
|
|
||||||
|
|
||||||
|
-- log error in laPampa
|
||||||
|
IF (@writeToLapampa = 1)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- -- get error message'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'DECLARE @err VARCHAR(2000) = CAST(ERROR_MESSAGE() AS VARCHAR(2000))'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- -- log job failed'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'EXECUTE ' + @jobSrvr + 'JOB.dbo.sp_job_fail @jobName, @err'
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
-- ensure identity insert is OFF for all tables
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- ensure that IdentityInsert is OFF for all tables'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'DECLARE @cur CURSOR, @sql NVARCHAR(100)'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'SET @cur = CURSOR FAST_FORWARD FOR'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'SELECT ''SET IDENTITY_INSERT ['' + name + ''] OFF'''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'FROM sys.tables'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'WHERE OBJECTPROPERTY (OBJECT_ID(name),''TableHasIdentity'') = 1'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'OPEN @cur'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'FETCH NEXT FROM @cur INTO @sql'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'WHILE @@FETCH_STATUS = 0'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + ' BEGIN'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'EXECUTE (@sql)'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + @s + 'FETCH NEXT FROM @cur INTO @sql'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + ' END'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'CLOSE @cur'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + 'DEALLOCATE @cur'
|
||||||
|
|
||||||
|
|
||||||
|
-- cleanup for data copy: enable triggers and constraints, start temporal tables
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT @s + '-- cleanup after error: enable triggers, constraints and/or temporal tables here...'
|
||||||
|
|
||||||
|
-- temporal tables
|
||||||
|
IF EXISTS ( SELECT * FROM @histTbl )
|
||||||
|
BEGIN
|
||||||
|
-- start temporal tables: SET SYSTEM_VERSIONING = ON
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '-- start temporal tables: SET SYSTEM_VERSIONING = ON, ADD PERIOD FOR SYSTEM_TIME'
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT SysVerCMD FROM @histTbl WHERE CMD = 'ON'
|
||||||
|
ORDER BY DataTable, CmdNr DESC
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
-- end catch
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'END CATCH'
|
||||||
|
-- END CATCH
|
||||||
|
|
||||||
|
-- END / GO
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString, NoTab) SELECT ' END', 1
|
||||||
|
INSERT INTO @tbl (SqlString, NoTab) SELECT 'GO', 1
|
||||||
|
|
||||||
|
|
||||||
|
-- temporal tables
|
||||||
|
IF EXISTS ( SELECT * FROM @histTbl )
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
-- start separate section for temporal tables
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '/* special section for TEMPORAL TABLES'
|
||||||
|
-- start temporal tables: SET SYSTEM_VERSIONING = ON, ADD PERIOD FOR SYSTEM_TIME
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '-- start temporal tables: SET SYSTEM_VERSIONING = ON, ADD PERIOD FOR SYSTEM_TIME'
|
||||||
|
INSERT INTO @tbl (SqlString)
|
||||||
|
SELECT SysVerCMD FROM @histTbl WHERE CMD = 'ON'
|
||||||
|
ORDER BY DataTable, CmdNr DESC
|
||||||
|
-- close special section for temporal tables
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT 'GO'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT '*/'
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
-- lines for file save
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
INSERT INTO @tbl (SqlString, NoTab) SELECT '/*', 1
|
||||||
|
INSERT INTO @tbl (SqlString, NoTab) SELECT 'DataCopy__' + REPLACE(REPLACE(@databaseName, '[', ''), ']', '') + '__from__' + @sourceServer, 1
|
||||||
|
INSERT INTO @tbl (SqlString, NoTab) SELECT '*/', 1
|
||||||
|
INSERT INTO @tbl (SqlString) SELECT ''
|
||||||
|
|
||||||
|
|
||||||
|
-- remove lines to be deleted
|
||||||
|
DELETE FROM @tbl WHERE SqlString = 'Delete this line before executing script!'
|
||||||
|
|
||||||
|
-- return all SQL strings
|
||||||
|
SELECT RTRIM(CASE WHEN (ISNULL(NoTab, 0) = 0) THEN ' ' ELSE '' END + SqlString) FROM @tbl
|
||||||
|
WHERE NOT (SqlString LIKE '%-- Delete this line%')
|
||||||
|
ORDER BY Tbl_PK
|
||||||
|
|
||||||
27
paul_snippets/Admin/Snapshot_DropCreate.sql
Normal file
27
paul_snippets/Admin/Snapshot_DropCreate.sql
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
USE [master]
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN TRY
|
||||||
|
|
||||||
|
DECLARE @debug INT = 0
|
||||||
|
|
||||||
|
SELECT @@SERVERNAME AS 'DbServer'
|
||||||
|
|
||||||
|
|
||||||
|
/* select 'dropCreateScript' for desired snapshot, copy into new window, change 1 to 0, run */
|
||||||
|
|
||||||
|
SELECT @@SERVERNAME AS 'DbServer', s.name AS 'SnapShot', s.database_id AS SN_Id, d.name AS 'Source_Database', d.database_id AS DB_Id, s.create_date,
|
||||||
|
'EXECUTE [master].dbo.p_DbTool__ReCreate_Snapshot ' + CAST(@debug AS VARCHAR(1)) + ', '''+ d.name + ''', ''' + s.name + ''';' AS ReCreateScript,
|
||||||
|
'EXECUTE [master].dbo.p_DbTool__Drop_Snapshot ' + CAST(@debug AS VARCHAR(1)) + ', ''' + s.name + ''';' AS DropScript
|
||||||
|
FROM sys.databases s
|
||||||
|
INNER JOIN sys.databases d ON d.database_id = s.source_database_id WHERE NOT (s.source_database_id IS NULL) --ORDER BY s.name
|
||||||
|
ORDER BY @@SERVERNAME, REPLACE(REPLACE(d.name, '__00', ''), '__01', ''), s.name
|
||||||
|
|
||||||
|
END TRY
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN CATCH
|
||||||
|
EXECUTE [master].dbo.sp_RethrowError
|
||||||
|
END CATCH
|
||||||
|
|
||||||
133
paul_snippets/CreateStuff/Create Table Code with Descr.sql
Normal file
133
paul_snippets/CreateStuff/Create Table Code with Descr.sql
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
USE <database, sysname, DB>
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- drop both CodeDes and Code tables
|
||||||
|
IF OBJECT_ID('<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des', 'U') IS NOT NULL
|
||||||
|
BEGIN
|
||||||
|
DROP TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
IF OBJECT_ID('<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>', 'U') IS NOT NULL
|
||||||
|
BEGIN
|
||||||
|
DROP TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- ** CODE TABLE ** --
|
||||||
|
-- create Code table
|
||||||
|
CREATE TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
(
|
||||||
|
<table_suffix, sysname, CoTbl>_PK int IDENTITY(1,1) NOT NULL,
|
||||||
|
Code nvarchar(x) NOT NULL,
|
||||||
|
Sort int NOT NULL,
|
||||||
|
IsActive bit NOT NULL,
|
||||||
|
|
||||||
|
Db_Status nvarchar(1) NOT NULL,
|
||||||
|
Db_InsDt smalldatetime NOT NULL,
|
||||||
|
Db_InsUser nvarchar(50) NOT NULL,
|
||||||
|
Db_UpdDt smalldatetime NULL,
|
||||||
|
Db_UpdUser nvarchar(50) NULL,
|
||||||
|
Db_Timestamp timestamp NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT PK_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> PRIMARY KEY CLUSTERED(<table_suffix, sysname, CoTbl>_PK ASC)
|
||||||
|
)
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- define update trigger
|
||||||
|
CREATE TRIGGER ut_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> ON <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> AFTER UPDATE
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
UPDATE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
SET Db_UpdDt = getdate(),
|
||||||
|
Db_UpdUser = right(suser_sname(), 50),
|
||||||
|
Db_Status = CASE WHEN isnull(i.Db_Status, '') = 'D' THEN 'D' ELSE 'U' END
|
||||||
|
FROM inserted i
|
||||||
|
WHERE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>.<table_suffix, sysname, CoTbl>_PK = i.<table_suffix, sysname, CoTbl>_PK
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- set unique index on Code
|
||||||
|
CREATE UNIQUE NONCLUSTERED INDEX IX_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>__Unique_Code ON <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> (Code ASC)
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- set default-value constraints
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> ADD
|
||||||
|
CONSTRAINT DF_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>_IsActive
|
||||||
|
DEFAULT ((1)) FOR IsActive
|
||||||
|
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> ADD
|
||||||
|
CONSTRAINT DF_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>_DbStatus
|
||||||
|
DEFAULT ('I') FOR Db_Status
|
||||||
|
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> ADD
|
||||||
|
CONSTRAINT DF_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>_DbInsDt
|
||||||
|
DEFAULT (getdate()) FOR Db_InsDt
|
||||||
|
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> ADD
|
||||||
|
CONSTRAINT DF_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>_DbInsUser
|
||||||
|
DEFAULT (right(suser_sname(),(50))) FOR Db_InsUser
|
||||||
|
GO
|
||||||
|
-- ** CODE TABLE ** --
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- ** DESCRIPTION TABLE ** --
|
||||||
|
-- create CodeDes table
|
||||||
|
CREATE TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des
|
||||||
|
(
|
||||||
|
<table_suffix, sysname, CoTbl>Des_PK int IDENTITY(1,1) NOT NULL,
|
||||||
|
<table_suffix, sysname, CoTbl>_FK int NOT NULL,
|
||||||
|
Lang nvarchar(2) NOT NULL,
|
||||||
|
Descr nvarchar(max) NULL,
|
||||||
|
|
||||||
|
Db_Status nvarchar(1) NOT NULL,
|
||||||
|
Db_InsDt smalldatetime NOT NULL,
|
||||||
|
Db_InsUser nvarchar(50) NOT NULL,
|
||||||
|
Db_UpdDt smalldatetime NULL,
|
||||||
|
Db_UpdUser nvarchar(50) NULL,
|
||||||
|
Db_Timestamp timestamp NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT PK_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des PRIMARY KEY CLUSTERED(<table_suffix, sysname, CoTbl>Des_PK ASC)
|
||||||
|
)
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- define update trigger
|
||||||
|
CREATE TRIGGER ut_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des ON <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des AFTER UPDATE
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
UPDATE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des
|
||||||
|
SET Db_UpdDt = getdate(),
|
||||||
|
Db_UpdUser = right(suser_sname(), 50),
|
||||||
|
Db_Status = CASE WHEN isnull(i.Db_Status, '') = 'D' THEN 'D' ELSE 'U' END
|
||||||
|
FROM inserted i
|
||||||
|
WHERE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des.<table_suffix, sysname, CoTbl>Des_PK = i.<table_suffix, sysname, CoTbl>Des_PK
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- set default-value constraints
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des ADD
|
||||||
|
CONSTRAINT DF_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des_DbStatus
|
||||||
|
DEFAULT ('I') FOR Db_Status
|
||||||
|
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des ADD
|
||||||
|
CONSTRAINT DF_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des_DbInsDt
|
||||||
|
DEFAULT (getdate()) FOR Db_InsDt
|
||||||
|
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des ADD
|
||||||
|
CONSTRAINT DF_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des_DbInsUser
|
||||||
|
DEFAULT (right(suser_sname(),(50))) FOR Db_InsUser
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- set foreign-key constraints
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des WITH CHECK ADD
|
||||||
|
CONSTRAINT FK_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des__<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
FOREIGN KEY(<table_suffix, sysname, CoTbl>_FK)
|
||||||
|
REFERENCES <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> (<table_suffix, sysname, CoTbl>_PK)
|
||||||
|
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des
|
||||||
|
CHECK CONSTRAINT FK_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des__<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- ** DESCRIPTION TABLE ** --
|
||||||
|
|
||||||
24
paul_snippets/CreateStuff/generic ut_trigger.sql
Normal file
24
paul_snippets/CreateStuff/generic ut_trigger.sql
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
USE Product__Work
|
||||||
|
GO
|
||||||
|
-- SELECT name, ROW_NUMBER() OVER(ORDER BY name) AS TblNr FROM sys.tables WHERE name LIKE 'DocumedisCache%' ORDER BY Name
|
||||||
|
|
||||||
|
-- create PK
|
||||||
|
ALTER TABLE dbo.<tableName, sysname, TBL>
|
||||||
|
ADD CONSTRAINT PK_<tableName, sysname, TBL> PRIMARY KEY CLUSTERED
|
||||||
|
( ASC) ON [DATA]
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- define update trigger
|
||||||
|
CREATE TRIGGER ut_<tableName, sysname, TBL> ON dbo.<tableName, sysname, TBL> AFTER UPDATE
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
UPDATE dbo.<tableName, sysname, TBL>
|
||||||
|
SET Db_UpdDt = GETDATE(),
|
||||||
|
Db_UpdUser = RIGHT(SUSER_SNAME(), 50)
|
||||||
|
FROM inserted i
|
||||||
|
WHERE <tableName, sysname, TBL>.IdPk = i.IdPk
|
||||||
|
AND
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
10
paul_snippets/DataLists/IndexViewer_List.sql
Normal file
10
paul_snippets/DataLists/IndexViewer_List.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
USE Index_Viewer
|
||||||
|
GO
|
||||||
|
|
||||||
|
DECLARE @x VARCHAR(20) = 'insureINDEX'
|
||||||
|
DECLARE @bt NVARCHAR(50) = 'Daily'
|
||||||
|
|
||||||
|
SELECT *
|
||||||
|
FROM dbo.v_ARTICLE___ART
|
||||||
|
WHERE XmlIndex = @x AND BatchType = @bt
|
||||||
|
|
||||||
16
paul_snippets/DataLists/List from Excel.sql
Normal file
16
paul_snippets/DataLists/List from Excel.sql
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
USE Product_Superset
|
||||||
|
GO
|
||||||
|
|
||||||
|
DECLARE @dir NVARCHAR(256) = N'D:\DATA\IMPORT_DATA\RedApp2_Imports'
|
||||||
|
DECLARE @file NVARCHAR(100) = N'Abena Import.xlsx'
|
||||||
|
DECLARE @tab NVARCHAR(100) = N'Tabelle1'
|
||||||
|
|
||||||
|
DECLARE @dir_file NVARCHAR(256) = N'''Data Source="' + @dir + N'\' + @file+ N'"; Extended properties=Excel 12.0'')...[' + @tab + N'$]'
|
||||||
|
SELECT N'SELECT TOP 3 * /* column list goes here*/ FROM OPENDATASOURCE(''Microsoft.ACE.OLEDB.12.0'', ' + @dir_file AS Select_From_Excel
|
||||||
|
|
||||||
|
--SELECT TOP 3 * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', @dir_file)...[Tabelle1$]
|
||||||
|
--'Data Source="D:\DATA\IMPORT_DATA\RedApp2_Imports\Abena Import.xlsx"; Extended properties=Excel 12.0'
|
||||||
|
--'Data Source="D:\DATA\IMPORT_DATA\RedApp2_Imports\Abena Import.xlsx"; Extended properties=Excel 12.0')...[$]
|
||||||
|
--FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source="D:\DATA\IMPORT_DATA\RedApp2_Imports\Abena Import.xlsx"; Extended properties=Excel 12.0')...[$]
|
||||||
|
|
||||||
|
--SELECT TOP 3 * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source="D:\DATA\IMPORT_DATA\RedApp2_Imports\Abena Import.xlsx"; Extended properties=Excel 12.0')...[Tabelle1$]
|
||||||
11
paul_snippets/DataLists/varTbl List.sql
Normal file
11
paul_snippets/DataLists/varTbl List.sql
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
USE Product_Superset
|
||||||
|
GO
|
||||||
|
|
||||||
|
DECLARE @tbl TABLE (Pharmacode INT PRIMARY KEY)
|
||||||
|
INSERT INTO @tbl (Pharmacode)
|
||||||
|
VALUES
|
||||||
|
(0 -- Pharmacode - int
|
||||||
|
)
|
||||||
|
|
||||||
|
-- = "('" & A2 & "'), "
|
||||||
|
-- = "(" & A2 & "), "
|
||||||
21
paul_snippets/ProductionChecks/QuarantineItems_Times.sql
Normal file
21
paul_snippets/ProductionChecks/QuarantineItems_Times.sql
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
USE SwissIndex_Products_Work
|
||||||
|
GO
|
||||||
|
|
||||||
|
DECLARE @t TABLE (ItemType VARCHAR(100), IndexCode INT, Dt DATETIME, INDEX IxDt (Dt))
|
||||||
|
INSERT INTO @t (ItemType, IndexCode, Dt)
|
||||||
|
SELECT ItemType, IndexCode, Dt
|
||||||
|
FROM (
|
||||||
|
SELECT ItemType, 128 AS IndexCode, MIN(Db_InsDT) AS Dt
|
||||||
|
FROM dbo.QuarantineItems
|
||||||
|
WHERE NOT ItemType = 'ARTICLE'
|
||||||
|
GROUP BY ItemType
|
||||||
|
UNION ALL
|
||||||
|
SELECT ItemType, IndexCode, MIN(Db_InsDT) AS Dt
|
||||||
|
FROM dbo.QuarantineItems
|
||||||
|
WHERE ItemType = 'ARTICLE'
|
||||||
|
GROUP BY ItemType, IndexCode
|
||||||
|
) g
|
||||||
|
|
||||||
|
SELECT * FROM @t
|
||||||
|
ORDER BY Dt
|
||||||
|
|
||||||
23
paul_snippets/RedApp/Fix Price Problems.sql
Normal file
23
paul_snippets/RedApp/Fix Price Problems.sql
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
USE ProductCompendium
|
||||||
|
GO
|
||||||
|
|
||||||
|
DECLARE @phar INT = 2759829
|
||||||
|
DECLARE @coNr INT = 13368
|
||||||
|
DECLARE @priTyp NVARCHAR(6) = N'PGRO'
|
||||||
|
|
||||||
|
SELECT * FROM dbo.ART_Art WHERE Pharmacode = @phar
|
||||||
|
SELECT * FROM dbo.PA_Pa WHERE CompanyNr = @coNr
|
||||||
|
SELECT * FROM dbo.ART_CoPri WHERE Code = @priTyp
|
||||||
|
|
||||||
|
DECLARE @artPK INT = ( SELECT Art_PK FROM ART_Art WHERE Pharmacode = @phar )
|
||||||
|
DECLARE @coPK INT = ( SELECT Pa_PK FROM dbo.PA_Pa WHERE CompanyNr = @coNr )
|
||||||
|
DECLARE @ptPK TINYINT = ( SELECT CoPri_PK FROM dbo.ART_CoPri WHERE Code = @priTyp )
|
||||||
|
|
||||||
|
SELECT ArtPri_PK, Art_FK, Pa_FK, CoPri_FK, FromDate, ToDate, Price, WithdrawnDate, Db_Status, Db_InsDt, Db_UpdDt, DATEADD(MINUTE, -1, FromDate) AS CouldBeToDate
|
||||||
|
FROM dbo.ART_ArtPri
|
||||||
|
WHERE Art_FK = @artPK AND Pa_FK = @coPK AND CoPri_FK = @ptPK
|
||||||
|
|
||||||
|
DECLARE @apPK INT = 0
|
||||||
|
DECLARE @td VARCHAR(100) = ''
|
||||||
|
|
||||||
|
SELECT ' UPDATE ART_ArtPri SET ToDate = ''' + @td + ''' WHERE ArtPri_PK = ' + CAST(@apPK AS VARCHAR(10))
|
||||||
87
paul_snippets/RedApp/Link_RP_with_LIE.sql
Normal file
87
paul_snippets/RedApp/Link_RP_with_LIE.sql
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
USE RedApp
|
||||||
|
GO
|
||||||
|
|
||||||
|
BEGIN TRY
|
||||||
|
|
||||||
|
/* set RP, LinkType and LIE values here */
|
||||||
|
-- RP company number
|
||||||
|
DECLARE @rp INT = __RP_Nr__
|
||||||
|
DECLARE @rpKey INT = ( SELECT rp.Pa_PK FROM PA_Pa rp WHERE rp.CompanyNr = @rp )
|
||||||
|
|
||||||
|
-- LinkType code
|
||||||
|
DECLARE @typ NVARCHAR(20) = 'RP_to_LIE'
|
||||||
|
DECLARE @typKey INT = ( SELECT CoLink_PK FROM PA_CoLink WHERE Code = @typ )
|
||||||
|
|
||||||
|
-- LIE company number
|
||||||
|
DECLARE @lie INT = __LIE_Nr__
|
||||||
|
DECLARE @lieKey INT = ( SELECT lie.Pa_PK FROM PA_Pa lie WHERE lie.CompanyNr = @lie )
|
||||||
|
|
||||||
|
--DECLARE @parent INT = 0
|
||||||
|
|
||||||
|
-- error vars
|
||||||
|
DECLARE @err NVARCHAR(MAX) = ''
|
||||||
|
DECLARE @errFound BIT = 0
|
||||||
|
|
||||||
|
/* validation on values provided */
|
||||||
|
-- RP exists
|
||||||
|
IF (@rpKey IS NULL)
|
||||||
|
BEGIN
|
||||||
|
SET @err = 'RechnungsPartner with CompanyNr ' + CAST(@rp AS varchar(10)) + ' does NOT exist - cannot continue'
|
||||||
|
SET @errFound = 1
|
||||||
|
END
|
||||||
|
|
||||||
|
-- LinkType exists
|
||||||
|
IF (@typKey IS NULL)
|
||||||
|
BEGIN
|
||||||
|
SET @err = ISNULL(' | ' + @err, '') + 'Partner LinkType ' + @typ + ' does NOT exist - cannot continue'
|
||||||
|
SET @errFound = 1
|
||||||
|
END
|
||||||
|
|
||||||
|
-- LIE exists
|
||||||
|
IF (@lieKey IS NULL)
|
||||||
|
BEGIN
|
||||||
|
SET @err = ISNULL(' | ' + @err, '') + 'Lieferant with CompanyNr ' + CAST(@rp AS varchar(10)) + ' does NOT exist - cannot continue'
|
||||||
|
SET @errFound = 1
|
||||||
|
END
|
||||||
|
|
||||||
|
-- if error found then throw error
|
||||||
|
IF (@errFound = 1)
|
||||||
|
BEGIN
|
||||||
|
RAISERROR (@err, 16, 1)
|
||||||
|
END
|
||||||
|
|
||||||
|
-- show possible values
|
||||||
|
SELECT @rp AS RP, @rpKey AS RP_Key, rp.ShortName AS RP_Name, @typ AS LinkType,
|
||||||
|
@lie AS LIE, lie.Pa_PK AS LIE_Key, lie.ShortName AS LIE_Name
|
||||||
|
FROM PA_Pa rp
|
||||||
|
CROSS JOIN PA_Pa lie
|
||||||
|
WHERE rp.Pa_PK = @rpKey AND lie.Pa_PK = @lieKey
|
||||||
|
|
||||||
|
BEGIN TRANSACTION
|
||||||
|
|
||||||
|
-- show current data
|
||||||
|
SELECT 'BEFORE' AS Stat, PaLink_PK, Pa_FK, @rp AS RP_CompanyNr, CoLink_FK, @typ AS LinkType, Linked_Pa_FK, @lie AS LIE_CompanyNr, Db_Status, Db_InsDt, Db_InsUser, Db_UpdDt, Db_UpdUser
|
||||||
|
FROM PA_PaLink
|
||||||
|
WHERE Pa_FK = @rpKey OR Linked_Pa_FK = @lieKey
|
||||||
|
|
||||||
|
-- insert into PA_PaLink
|
||||||
|
INSERT INTO PA_PaLink (Pa_FK, CoLink_FK, Linked_Pa_FK)
|
||||||
|
SELECT @rpKey AS Pa_FK, @typKey AS CoLink_FK, @lieKey AS Linked_Pa_FK
|
||||||
|
|
||||||
|
-- show results after insert
|
||||||
|
SELECT 'AFTER' as Stat, PaLink_PK, Pa_FK, @rp AS RP_CompanyNr, CoLink_FK, @typ AS LinkType, Linked_Pa_FK, @lie AS LIE_CompanyNr, Db_Status, Db_InsDt, Db_InsUser, Db_UpdDt, Db_UpdUser
|
||||||
|
FROM PA_PaLink
|
||||||
|
WHERE Pa_FK = @rpKey OR Linked_Pa_FK = @lieKey
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
ROLLBACK TRANSACTION
|
||||||
|
-- COMMIT TRANSACTION
|
||||||
|
|
||||||
|
--SELECT * FROM PA_Pa WHERE Parent_Pa_FK = ( SELECT Pa_PK FROM PA_Pa WHERE CompanyNr = @parent ) ORDER BY CompanyNr
|
||||||
|
|
||||||
|
END TRY
|
||||||
|
|
||||||
|
BEGIN CATCH
|
||||||
|
EXECUTE [master].dbo.sp_RethrowError
|
||||||
|
END CATCH
|
||||||
45
paul_snippets/superset/processing/Superset table.sql
Normal file
45
paul_snippets/superset/processing/Superset table.sql
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
USE <database, sysname, Swisspeddose_Superset__00>
|
||||||
|
GO
|
||||||
|
|
||||||
|
/*
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- drop table
|
||||||
|
IF OBJECT_ID('<table_name, sysname, TBL>', 'U') IS NOT NULL
|
||||||
|
BEGIN
|
||||||
|
DROP TABLE <table_name, sysname, TBL>
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- create table
|
||||||
|
CREATE TABLE <table_name, sysname, TBL>
|
||||||
|
(
|
||||||
|
<table_Key, sysname, CoTbl> int NOT NULL,
|
||||||
|
|
||||||
|
Nvar nvarchar(x) NOT NULL,
|
||||||
|
Inte int NOT NULL,
|
||||||
|
|
||||||
|
Db_InsDt smalldatetime NOT NULL CONSTRAINT DF_<table_name, sysname, TBL>_DbInsDt DEFAULT (getdate()),
|
||||||
|
Db_InsUser nvarchar(50) NOT NULL CONSTRAINT DF_<table_name, sysname, TBL>_DbInsUser DEFAULT (right(suser_sname(),(50))),
|
||||||
|
Db_UpdDt smalldatetime NULL,
|
||||||
|
Db_UpdUser nvarchar(50) NULL,
|
||||||
|
|
||||||
|
CONSTRAINT PK_<table_name, sysname, TBL> PRIMARY KEY CLUSTERED(<table_Key, sysname, CoTbl> ASC)
|
||||||
|
)
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- define update trigger
|
||||||
|
CREATE TRIGGER ut_<table_name, sysname, TBL> ON <table_name, sysname, TBL> AFTER UPDATE
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
UPDATE <table_name, sysname, TBL>
|
||||||
|
SET Db_UpdDt = getdate(),
|
||||||
|
Db_UpdUser = right(suser_sname(), 50)
|
||||||
|
FROM inserted i
|
||||||
|
WHERE <table_name, sysname, TBL>.<table_Key, sysname, CoTbl> = i.<table_Key, sysname, CoTbl>
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- set unique index on Code
|
||||||
|
CREATE UNIQUE NONCLUSTERED INDEX IX_<table_name, sysname, TBL>__Unique_Code ON <table_name, sysname, TBL> (<table_Key, sysname, CoTbl>)
|
||||||
|
GO
|
||||||
58
paul_snippets/superset/processing/generic table.sql
Normal file
58
paul_snippets/superset/processing/generic table.sql
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
USE <database, sysname, myProducts>
|
||||||
|
GO
|
||||||
|
|
||||||
|
/*
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- drop table
|
||||||
|
IF OBJECT_ID('<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>', 'U') IS NOT NULL
|
||||||
|
BEGIN
|
||||||
|
DROP TABLE dbo.<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- create table
|
||||||
|
CREATE TABLE dbo.<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
(
|
||||||
|
<table_suffix, sysname, CoTbl>ID int IDENTITY(1,1) NOT NULL,
|
||||||
|
-- <FK_table_suffix, sysname, CoTbl>ID INT NOT NULL,
|
||||||
|
Nvar nvarchar(x) NOT NULL,
|
||||||
|
Inte int NOT NULL,
|
||||||
|
|
||||||
|
Db_InsDt smalldatetime NOT NULL CONSTRAINT DF_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>_DbInsDt DEFAULT (getdate()),
|
||||||
|
Db_InsUser nvarchar(50) NOT NULL CONSTRAINT DF_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>_DbInsUser DEFAULT (right(suser_sname(),(50))),
|
||||||
|
Db_UpdDt smalldatetime NULL,
|
||||||
|
Db_UpdUser nvarchar(50) NULL,
|
||||||
|
|
||||||
|
CONSTRAINT PK_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> PRIMARY KEY CLUSTERED(<table_suffix, sysname, CoTbl>ID ASC)
|
||||||
|
)
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- define update trigger
|
||||||
|
CREATE TRIGGER ut_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> ON <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> AFTER UPDATE
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
UPDATE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
SET Db_UpdDt = getdate(),
|
||||||
|
Db_UpdUser = right(suser_sname(), 50)
|
||||||
|
FROM inserted i
|
||||||
|
WHERE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>.<table_suffix, sysname, CoTbl>ID = i.<table_suffix, sysname, CoTbl>ID
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- set unique index on Code
|
||||||
|
CREATE UNIQUE NONCLUSTERED INDEX IX_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>__Unique_Code ON <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> (<FK_table_suffix, sysname, CoTbl>ID)
|
||||||
|
GO
|
||||||
|
|
||||||
|
/*
|
||||||
|
-- set foreign-key constraints
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> WITH CHECK ADD
|
||||||
|
CONSTRAINT FK_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>__<table_prefix, sysname, TBL>_<FK_table_suffix, sysname, CoTbl>
|
||||||
|
FOREIGN KEY(<FK_table_suffix, sysname, CoTbl>ID)
|
||||||
|
REFERENCES <table_prefix, sysname, TBL>_<FK_table_suffix, sysname, CoTbl> (<FK_table_suffix, sysname, CoTbl>ID)
|
||||||
|
|
||||||
|
ALTER TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
CHECK CONSTRAINT FK_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>__<table_prefix, sysname, TBL>_<FK_table_suffix, sysname, CoTbl>
|
||||||
|
GO
|
||||||
|
|
||||||
|
*/
|
||||||
46
paul_snippets/test.sql
Normal file
46
paul_snippets/test.sql
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
-- drop both CodeDes and Code tables
|
||||||
|
IF OBJECT_ID('<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des', 'U') IS NOT NULL
|
||||||
|
BEGIN
|
||||||
|
DROP TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>Des
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
IF OBJECT_ID('<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>', 'U') IS NOT NULL
|
||||||
|
BEGIN
|
||||||
|
DROP TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- ** CODE TABLE ** --
|
||||||
|
-- create Code table
|
||||||
|
CREATE TABLE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
(
|
||||||
|
<table_suffix, sysname, CoTbl>_PK int IDENTITY(1,1) NOT NULL,
|
||||||
|
Code nvarchar(x) NOT NULL,
|
||||||
|
Sort int NOT NULL,
|
||||||
|
IsActive bit NOT NULL,
|
||||||
|
|
||||||
|
Db_Status nvarchar(1) NOT NULL,
|
||||||
|
Db_InsDt smalldatetime NOT NULL,
|
||||||
|
Db_InsUser nvarchar(50) NOT NULL,
|
||||||
|
Db_UpdDt smalldatetime NULL,
|
||||||
|
Db_UpdUser nvarchar(50) NULL,
|
||||||
|
Db_Timestamp timestamp NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT PK_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> PRIMARY KEY CLUSTERED(<table_suffix, sysname, CoTbl>_PK ASC)
|
||||||
|
)
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- define update trigger
|
||||||
|
CREATE TRIGGER ut_<table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> ON <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl> AFTER UPDATE
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
UPDATE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>
|
||||||
|
SET Db_UpdDt = getdate(),
|
||||||
|
Db_UpdUser = right(suser_sname(), 50),
|
||||||
|
Db_Status = CASE WHEN isnull(i.Db_Status, '') = 'D' THEN 'D' ELSE 'U' END
|
||||||
|
FROM inserted i
|
||||||
|
WHERE <table_prefix, sysname, TBL>_<table_suffix, sysname, CoTbl>.<table_suffix, sysname, CoTbl>_PK = i.<table_suffix, sysname, CoTbl>_PK
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
Reference in New Issue
Block a user