sql_cmd 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/lib/optional_dependencies.rb +30 -0
  4. data/lib/sql_cmd/agent.rb +32 -0
  5. data/lib/sql_cmd/always_on.rb +267 -0
  6. data/lib/sql_cmd/azure.rb +80 -0
  7. data/lib/sql_cmd/backups.rb +276 -0
  8. data/lib/sql_cmd/config.rb +62 -0
  9. data/lib/sql_cmd/database.rb +618 -0
  10. data/lib/sql_cmd/format.rb +124 -0
  11. data/lib/sql_cmd/query.rb +350 -0
  12. data/lib/sql_cmd/security.rb +21 -0
  13. data/lib/sql_cmd/sql_helper.ps1 +89 -0
  14. data/lib/sql_cmd.rb +44 -0
  15. data/sql_scripts/Agent/CreateSQLJob.sql +81 -0
  16. data/sql_scripts/Agent/JobLastRunInfo.sql +70 -0
  17. data/sql_scripts/Agent/JobRunStatus.sql +21 -0
  18. data/sql_scripts/Agent/SQLAgentStatus.sql +8 -0
  19. data/sql_scripts/AlwaysOn/AddDatabaseToAvailabilityGroupOnSecondary.sql +72 -0
  20. data/sql_scripts/AlwaysOn/AddDatabaseToPrimaryAvailabilityGroup.sql +16 -0
  21. data/sql_scripts/AlwaysOn/AutomaticSeedingProgress.sql +34 -0
  22. data/sql_scripts/AlwaysOn/ConfigurePrimaryForAutomaticSeeding.sql +2 -0
  23. data/sql_scripts/AlwaysOn/ConfigurePrimaryForManualSeeding.sql +2 -0
  24. data/sql_scripts/AlwaysOn/ConfigureSecondaryForAutomaticSeeding.sql +1 -0
  25. data/sql_scripts/AlwaysOn/DropSecondary.sql +58 -0
  26. data/sql_scripts/AlwaysOn/RemoveDatabaseFromGroup.sql +2 -0
  27. data/sql_scripts/AlwaysOn/SynchronizationState.sql +14 -0
  28. data/sql_scripts/Database/BackupDatabase.sql +95 -0
  29. data/sql_scripts/Database/CompressAllTables.sql +100 -0
  30. data/sql_scripts/Database/CreateLogin.sql +16 -0
  31. data/sql_scripts/Database/DropDatabase.sql +51 -0
  32. data/sql_scripts/Database/GetBackupFiles.sql +31 -0
  33. data/sql_scripts/Database/GetBackupHeaders.sql +94 -0
  34. data/sql_scripts/Database/GetFileInfoFromBackup.sql +9 -0
  35. data/sql_scripts/Database/RestoreDatabase.sql +185 -0
  36. data/sql_scripts/Database/SetFullRecovery.sql +19 -0
  37. data/sql_scripts/Database/SetSQLCompatibility.sql +33 -0
  38. data/sql_scripts/Security/AssignDatabaseRoles.sql +44 -0
  39. data/sql_scripts/Security/CreateOrUpdateCredential.sql +11 -0
  40. data/sql_scripts/Security/CreateSqlLogin.sql +20 -0
  41. data/sql_scripts/Security/ExportDatabasePermissions.sql +757 -0
  42. data/sql_scripts/Security/GenerateCreateLoginsScript.sql +144 -0
  43. data/sql_scripts/Security/GenerateValidateLoginsScript.sql +83 -0
  44. data/sql_scripts/Security/GetUserSID.sql +3 -0
  45. data/sql_scripts/Security/UpdateSqlPassword.sql +24 -0
  46. data/sql_scripts/Security/ValidateDatabaseRoles.sql +12 -0
  47. data/sql_scripts/Status/ANSINullsOffTableCount.sql +13 -0
  48. data/sql_scripts/Status/ANSINullsOffTables.sql +9 -0
  49. data/sql_scripts/Status/BackupProgress.sql +17 -0
  50. data/sql_scripts/Status/DatabaseInfo.sql +199 -0
  51. data/sql_scripts/Status/DatabaseSize.sql +26 -0
  52. data/sql_scripts/Status/DiskSpace.sql +14 -0
  53. data/sql_scripts/Status/RestoreProgress.sql +17 -0
  54. data/sql_scripts/Status/SQLSettings.sql +182 -0
  55. data/sql_scripts/Status/UncompressedTableCount.sql +27 -0
  56. metadata +224 -0
@@ -0,0 +1,31 @@
1
+ DECLARE @Depth int
2
+ DECLARE @FileFlag int
3
+ DECLARE @TargetFolder nvarchar(255)
4
+ DECLARE @BackupBaseName nvarchar(255)
5
+ DECLARE @LogOnly bit
6
+ DECLARE @BackupFileExtension nvarchar(3)
7
+
8
+ SET @Depth = 1
9
+ SET @FileFlag = 1
10
+ SET @TargetFolder = '$(targetfolder)'
11
+ SET @BackupBaseName = '$(bkupname)'
12
+ SET @LogOnly = '$(logonly)'
13
+
14
+ SET @BackupFileExtension = CASE WHEN @LogOnly = 1 THEN 'trn' ELSE 'bak' END
15
+
16
+ DECLARE @DirTree TABLE (
17
+ FileName nvarchar(255),
18
+ Depth smallint,
19
+ FileFlag smallint
20
+ )
21
+
22
+ INSERT INTO @DirTree
23
+ EXEC xp_dirtree @TargetFolder, @Depth, @FileFlag
24
+
25
+ SELECT * FROM @DirTree
26
+ WHERE FileFlag = @FileFlag AND (
27
+ [FileName] LIKE @BackupBaseName + '[_][0-9][0-9][0-9][0-9][0-9][0-9].part[0-9]%.' + @BackupFileExtension
28
+ OR [FileName] LIKE @BackupBaseName + '[_][0-9][0-9][0-9][0-9][0-9][0-9].' + @BackupFileExtension
29
+ OR [FileName] LIKE @BackupBaseName + '.part[0-9]%.' + @BackupFileExtension
30
+ OR [FileName] LIKE @BackupBaseName + '.' + @BackupFileExtension
31
+ )
@@ -0,0 +1,94 @@
1
+ SET NOCOUNT ON
2
+
3
+ DECLARE @bkup_files nvarchar(max)
4
+ DECLARE @credential nvarchar(max)
5
+ DECLARE @rowcount int
6
+
7
+ DECLARE @HeaderOnly_cmd nvarchar(max)
8
+ DECLARE @BackupSetPosition int
9
+ DECLARE @Version14Plus bit
10
+ DECLARE @SQLMajorVersion nvarchar(128)
11
+
12
+ SET @bkup_files = '$(bkupfiles)'
13
+ SET @credential = '$(credential)'
14
+
15
+ SET @SQLMajorVersion = CONVERT(NVARCHAR(128), SERVERPROPERTY('ProductVersion'))
16
+ SET @SQLMajorVersion = LEFT(@SQLMajorVersion, CHARINDEX('.', @SQLMajorVersion) - 1)
17
+
18
+ SET @HeaderOnly_cmd =
19
+ 'DECLARE @BackupSets TABLE(
20
+ BackupName nvarchar(128),
21
+ BackupDescription nvarchar(255),
22
+ BackupType smallint,
23
+ ExpirationDate datetime,
24
+ Compressed bit,
25
+ Position smallint,
26
+ DeviceType tinyint,
27
+ UserName nvarchar(128),
28
+ ServerName nvarchar(128),
29
+ DatabaseName nvarchar(128),
30
+ DatabaseVersion int,
31
+ DatabaseCreationDate datetime,
32
+ BackupSize numeric(20,0),
33
+ FirstLSN numeric(25,0),
34
+ LastLSN numeric(25,0),
35
+ CheckpointLSN numeric(25,0),
36
+ DatabaseBackupLSN numeric(25,0),
37
+ BackupStartDate datetime,
38
+ BackupFinishDate datetime,
39
+ SortOrder smallint,
40
+ CodePage smallint,
41
+ UnicodeLocaleId int,
42
+ UnicodeComparisonStyle int,
43
+ CompatibilityLevel tinyint,
44
+ SoftwareVendorId int,
45
+ SoftwareVersionMajor int,
46
+ SoftwareVersionMinor int,
47
+ SoftwareVersionBuild int,
48
+ MachineName nvarchar(128),
49
+ Flags int,
50
+ BindingID uniqueidentifier,
51
+ RecoveryForkID uniqueidentifier,
52
+ Collation nvarchar(128),
53
+ FamilyGUID uniqueidentifier,
54
+ HasBulkLoggedData bit,
55
+ IsSnapshot bit,
56
+ IsReadOnly bit,
57
+ IsSingleUser bit,
58
+ HasBackupChecksums bit,
59
+ IsDamaged bit,
60
+ BeginsLogChain bit,
61
+ HasIncompleteMetaData bit,
62
+ IsForceOffline bit,
63
+ IsCopyOnly bit,
64
+ FirstRecoveryForkID uniqueidentifier,
65
+ ForkPointLSN numeric(25,0),
66
+ RecoveryModel nvarchar(60),
67
+ DifferentialBaseLSN numeric(25,0),
68
+ DifferentialBaseGUID uniqueidentifier,
69
+ BackupTypeDescription nvarchar(60),
70
+ BackupSetGUID uniqueidentifier,
71
+ CompressedBackupSize bit,'
72
+ + CASE WHEN (@SQLMajorVersion >= 11) THEN ' Containment tinyint,' ELSE '' END
73
+ + CASE WHEN (@SQLMajorVersion >= 12) THEN
74
+ 'KeyAlgorithm nvarchar(32),
75
+ EncryptorThumbprint varbinary(20),
76
+ EncryptorType nvarchar(32),' ELSE '' END
77
+ + '--
78
+ -- This field added to retain order by
79
+ --
80
+ Seq int NOT NULL identity(1,1)
81
+ )
82
+
83
+ INSERT INTO @BackupSets
84
+ exec (''
85
+ RESTORE HEADERONLY
86
+ FROM ' + REPLACE(@bkup_files, '''', '''''') + '
87
+ WITH ' + CASE WHEN @credential NOT LIKE '' THEN 'CREDENTIAL = ''''' + @credential + ''''', ' ELSE '' END + '
88
+ NOUNLOAD'')
89
+
90
+ SELECT * FROM @BackupSets
91
+ ORDER BY BackupFinishDate DESC
92
+ '
93
+
94
+ EXEC sp_executesql @HeaderOnly_cmd
@@ -0,0 +1,9 @@
1
+ SET NOCOUNT ON
2
+
3
+ DECLARE @sql nvarchar(max)
4
+ DECLARE @credential nvarchar(max)
5
+
6
+ SET @credential = '$(credential)'
7
+ SET @sql = 'RESTORE FILELISTONLY FROM $(bkupfiles)' + CASE WHEN @credential NOT LIKE '' THEN ' WITH CREDENTIAL = ''' + @credential + '''' ELSE '' END
8
+
9
+ EXEC(@sql)
@@ -0,0 +1,185 @@
1
+ SET NOCOUNT ON
2
+
3
+ DECLARE @db_name nvarchar(max)
4
+ DECLARE @credential nvarchar(max)
5
+ DECLARE @db_state int
6
+ DECLARE @bkup_files nvarchar(max)
7
+ DECLARE @data_file nvarchar(max)
8
+ DECLARE @data_file_logical_name nvarchar(255)
9
+ DECLARE @log_file nvarchar(max)
10
+ DECLARE @log_file_logical_name nvarchar(255)
11
+ DECLARE @database_cmd nvarchar(max)
12
+ DECLARE @setproperties_cmd nvarchar(max)
13
+ DECLARE @prepareolddb_cmd nvarchar(max)
14
+ DECLARE @replcheck_cmd nvarchar(max)
15
+ DECLARE @change_logical_names_cmd nvarchar(max)
16
+ DECLARE @rowcount int
17
+ DECLARE @log_only bit
18
+ DECLARE @recovery bit
19
+ DECLARE @replace bit
20
+ DECLARE @keep_replication bit
21
+ DECLARE @unload bit
22
+ DECLARE @stats nvarchar(3)
23
+
24
+ DECLARE @GetPosition_cmd nvarchar(max)
25
+ DECLARE @BackupSetPosition int
26
+ DECLARE @Version14Plus bit
27
+ DECLARE @SQLMajorVersion nvarchar(128)
28
+
29
+ SET @db_name = '$(databasename)'
30
+ SET @credential = '$(credential)'
31
+ SET @bkup_files = '$(bkupfiles)'
32
+ SET @data_file = '$(datafile)'
33
+ SET @data_file_logical_name = '$(datafilelogicalname)'
34
+ SET @log_file = '$(logfile)'
35
+ SET @log_file_logical_name = '$(logfilelogicalname)'
36
+ SET @log_only = '$(logonly)'
37
+ SET @recovery = '$(recovery)'
38
+ SET @replace = '$(replace)'
39
+ SET @keep_replication = '$(keepreplication)'
40
+ SET @unload = '$(unload)'
41
+ SET @stats = '$(stats)'
42
+
43
+ SET @SQLMajorVersion = CONVERT(NVARCHAR(128), SERVERPROPERTY('ProductVersion'))
44
+ SET @SQLMajorVersion = LEFT(@SQLMajorVersion, CHARINDEX('.', @SQLMajorVersion) - 1)
45
+ SELECT @db_state = [state] FROM sys.databases WHERE [Name] = @db_name
46
+
47
+ SET @GetPosition_cmd =
48
+ 'DECLARE @BackupSets TABLE(
49
+ BackupName nvarchar(128),
50
+ BackupDescription nvarchar(255),
51
+ BackupType smallint,
52
+ ExpirationDate datetime,
53
+ Compressed bit,
54
+ Position smallint,
55
+ DeviceType tinyint,
56
+ UserName nvarchar(128),
57
+ ServerName nvarchar(128),
58
+ DatabaseName nvarchar(128),
59
+ DatabaseVersion int,
60
+ DatabaseCreationDate datetime,
61
+ BackupSize numeric(20,0),
62
+ FirstLSN numeric(25,0),
63
+ LastLSN numeric(25,0),
64
+ CheckpointLSN numeric(25,0),
65
+ DatabaseBackupLSN numeric(25,0),
66
+ BackupStartDate datetime,
67
+ BackupFinishDate datetime,
68
+ SortOrder smallint,
69
+ CodePage smallint,
70
+ UnicodeLocaleId int,
71
+ UnicodeComparisonStyle int,
72
+ CompatibilityLevel tinyint,
73
+ SoftwareVendorId int,
74
+ SoftwareVersionMajor int,
75
+ SoftwareVersionMinor int,
76
+ SoftwareVersionBuild int,
77
+ MachineName nvarchar(128),
78
+ Flags int,
79
+ BindingID uniqueidentifier,
80
+ RecoveryForkID uniqueidentifier,
81
+ Collation nvarchar(128),
82
+ FamilyGUID uniqueidentifier,
83
+ HasBulkLoggedData bit,
84
+ IsSnapshot bit,
85
+ IsReadOnly bit,
86
+ IsSingleUser bit,
87
+ HasBackupChecksums bit,
88
+ IsDamaged bit,
89
+ BeginsLogChain bit,
90
+ HasIncompleteMetaData bit,
91
+ IsForceOffline bit,
92
+ IsCopyOnly bit,
93
+ FirstRecoveryForkID uniqueidentifier,
94
+ ForkPointLSN numeric(25,0),
95
+ RecoveryModel nvarchar(60),
96
+ DifferentialBaseLSN numeric(25,0),
97
+ DifferentialBaseGUID uniqueidentifier,
98
+ BackupTypeDescription nvarchar(60),
99
+ BackupSetGUID uniqueidentifier,
100
+ CompressedBackupSize bit,'
101
+ + CASE WHEN (@SQLMajorVersion >= 11) THEN ' Containment tinyint,' ELSE '' END
102
+ + CASE WHEN (@SQLMajorVersion >= 12) THEN
103
+ 'KeyAlgorithm nvarchar(32),
104
+ EncryptorThumbprint varbinary(20),
105
+ EncryptorType nvarchar(32),' ELSE '' END
106
+ + '--
107
+ -- This field added to retain order by
108
+ --
109
+ Seq int NOT NULL identity(1,1)
110
+ )
111
+
112
+ INSERT INTO @BackupSets
113
+ exec (''
114
+ RESTORE HEADERONLY
115
+ FROM ' + REPLACE(@bkup_files, '''', '''''') + '
116
+ WITH NOUNLOAD' + CASE WHEN @credential NOT LIKE '' THEN ', CREDENTIAL = ''''' + @credential + '''''' ELSE '' END + ''')
117
+
118
+ SELECT TOP(1) @BackupSetPosition = Position FROM @BackupSets
119
+ ORDER BY BackupFinishDate DESC
120
+ '
121
+
122
+ SET @replcheck_cmd =
123
+ N'IF EXISTS (SELECT * FROM [' + @db_name + '].[INFORMATION_SCHEMA].[TABLES]
124
+ WHERE TABLE_NAME = ''syspublications'')
125
+ BEGIN
126
+ SELECT @rowcount=count(*) FROM [' + @db_name + '].[dbo].syspublications
127
+ END
128
+ ELSE
129
+ BEGIN
130
+ SET @rowcount = 0
131
+ END
132
+ '
133
+
134
+ -- Check if replication is enabled. If so, notify user and exit.
135
+ IF EXISTS (SELECT * FROM sys.databases WHERE [Name] = @db_name AND state != 1)
136
+ BEGIN
137
+ EXEC sp_executesql @replcheck_cmd, N'@rowcount int output', @rowcount output;
138
+ IF (@rowcount > 0)
139
+ BEGIN
140
+ PRINT ('Replication is enabled on ' + @db_name + '. Remove replication before proceeding...')
141
+ RETURN
142
+ END
143
+ END
144
+
145
+ SET @prepareolddb_cmd =
146
+ '
147
+ IF EXISTS (SELECT * FROM sys.databases WHERE Name = ''' + @db_name + ''')
148
+ BEGIN
149
+ ALTER DATABASE [' + @db_name + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
150
+ ALTER DATABASE [' + @db_name + '] SET MULTI_USER WITH ROLLBACK IMMEDIATE
151
+ END
152
+ '
153
+
154
+ -- Get the position of the most recent backup set.
155
+ EXEC sp_executesql @GetPosition_cmd, N'@BackupSetPosition int output', @BackupSetPosition output;
156
+ IF (@BackupSetPosition < 1)
157
+ BEGIN
158
+ PRINT ('Failed to get backup set position. Using position 1...')
159
+ SET @BackupSetPosition = 1
160
+ END
161
+
162
+ -- Restore database query
163
+ SET @database_cmd = 'RESTORE ' + CASE WHEN @log_only = 1 THEN 'LOG' ELSE 'DATABASE' END + ' [' + @db_name + '] FROM ' + @bkup_files + ' WITH FILE = ' + CONVERT(NVARCHAR(5), @BackupSetPosition) + ', ' +
164
+ CASE WHEN @data_file_logical_name != '' THEN 'MOVE N''' + @data_file_logical_name + ''' TO N''' + @data_file + ''', ' ELSE '' END +
165
+ CASE WHEN @log_file_logical_name != '' THEN 'MOVE N''' + @log_file_logical_name + ''' TO N''' + @log_file + ''', ' ELSE '' END +
166
+ CASE WHEN @replace = 1 THEN 'REPLACE, ' ELSE '' END +
167
+ CASE WHEN @recovery = 1 THEN 'RECOVERY' ELSE 'NORECOVERY' END + ', ' +
168
+ CASE WHEN @keep_replication = 1 THEN 'KEEP_REPLICATION, ' ELSE '' END +
169
+ CASE WHEN @credential NOT LIKE '' THEN 'CREDENTIAL = ''' + @credential + ''', ' ELSE '' END +
170
+ CASE WHEN @unload = 1 THEN 'UNLOAD' ELSE 'NOUNLOAD' END + ', STATS = ' + @stats
171
+
172
+ SET @change_logical_names_cmd = 'ALTER DATABASE [' + @db_name + '] MODIFY FILE ( NAME = ' + @data_file_logical_name + ', NEWNAME = ' + @db_name + '_Data );' +
173
+ 'ALTER DATABASE [' + @db_name + '] MODIFY FILE ( NAME = ' + @log_file_logical_name + ', NEWNAME = ' + @db_name + '_Log );'
174
+
175
+ IF @db_state != 1 -- If it's not restoring
176
+ BEGIN
177
+ EXEC (@prepareolddb_cmd)
178
+ END
179
+
180
+ EXEC (@database_cmd)
181
+
182
+ IF @db_state != 1
183
+ BEGIN
184
+ EXEC (@change_logical_names_cmd)
185
+ END
@@ -0,0 +1,19 @@
1
+ IF (SELECT recovery_model_desc FROM sys.databases WHERE name = '$(databasename)') NOT LIKE 'FULL'
2
+ BEGIN
3
+ PRINT ('Setting recovery to full...')
4
+
5
+ ALTER DATABASE [$(databasename)] SET RECOVERY FULL WITH NO_WAIT
6
+
7
+ DECLARE @currentrecoverymodel nvarchar(50)
8
+ SELECT @currentrecoverymodel = recovery_model_desc FROM sys.databases WHERE name = '$(databasename)'
9
+ IF (@currentrecoverymodel NOT LIKE 'FULL')
10
+ BEGIN
11
+ RAISERROR('Failed to set recovery to full!', 20, 1) WITH LOG
12
+ END
13
+ PRINT ('Recovery model set to ' + @currentrecoverymodel)
14
+ SELECT CAST(1 AS bit) AS RecoveryModelUpdated
15
+ END
16
+ ELSE
17
+ BEGIN
18
+ SELECT CAST(0 AS bit) AS RecoveryModelUpdated
19
+ END
@@ -0,0 +1,33 @@
1
+ SET NOCOUNT ON
2
+
3
+ DECLARE @dbname nvarchar(128)
4
+ DECLARE @alter_db_command nvarchar(255)
5
+ DECLARE @compatibility_level nvarchar(3)
6
+ DECLARE @current_compatibility_level nvarchar(3)
7
+ DECLARE @out_msg nvarchar(max)
8
+
9
+ SET @dbname = '$(databasename)'
10
+ SET @compatibility_level = '$(compatibility_level)'
11
+ SET @alter_db_command = 'ALTER DATABASE [' + @dbname + '] SET COMPATIBILITY_LEVEL = ' + @compatibility_level
12
+
13
+ SELECT @current_compatibility_level = compatibility_level FROM sys.databases WHERE name = @dbname
14
+
15
+ IF @current_compatibility_level < @compatibility_level
16
+ BEGIN
17
+ SET @out_msg = 'Updating compatibility level from ' + @current_compatibility_level + ' to ' + @compatibility_level + '.'
18
+ PRINT @out_msg
19
+ exec sp_executesql @alter_db_command
20
+ END
21
+ ELSE IF @current_compatibility_level = @compatibility_level
22
+ BEGIN
23
+ SET @out_msg = 'Compatibility level already set to ' + @current_compatibility_level + '. No change made.'
24
+ PRINT @out_msg
25
+ END
26
+ ELSE
27
+ BEGIN
28
+ SET @out_msg = 'WARNING! Current compatibility level (' + @current_compatibility_level + ') is higher than ' + @compatibility_level + '! Downgrading compatibility level!'
29
+ PRINT @out_msg
30
+ exec sp_executesql @alter_db_command
31
+ END
32
+
33
+ SELECT compatibility_level FROM sys.databases WHERE name = @dbname
@@ -0,0 +1,44 @@
1
+ USE [$(databasename)]
2
+
3
+ DECLARE @login_name nvarchar(max)
4
+ DECLARE @db_name nvarchar(max)
5
+ DECLARE @user_cmd nvarchar(max)
6
+ DECLARE @roles nvarchar(max)
7
+ DECLARE @roles_cmd nvarchar(max)
8
+ DECLARE @database_roles TABLE (
9
+ DatabaseRole nvarchar(max)
10
+ )
11
+
12
+ SET @login_name = '$(user)'
13
+ SET @db_name = '$(databasename)'
14
+ SET @roles = '$(databaseroles)' -- comma separated list - do not use commas in the values
15
+
16
+ SET @roles_cmd = '
17
+ DECLARE @database_roles TABLE ( DatabaseRole nvarchar(max) )
18
+ INSERT INTO @database_roles ( DatabaseRole )
19
+ VALUES ( ' + '''' + REPLACE(@roles, ',', '''), (''') + ''')
20
+ SELECT RTRIM(LTRIM(DatabaseRole)) FROM @database_roles'
21
+ INSERT INTO @database_roles
22
+ exec sp_executesql @roles_cmd
23
+
24
+ -- Add user and assign security query
25
+ SET @user_cmd =
26
+ '
27
+ USE [' + @db_name + ']
28
+ IF EXISTS (SELECT * FROM sys.schemas WHERE name = N''' + @login_name + ''')
29
+ BEGIN
30
+ DROP SCHEMA [' + @login_name + ']
31
+ END
32
+
33
+ IF EXISTS (SELECT * FROM sys.database_principals WHERE name=N''' + @login_name + ''')
34
+ BEGIN
35
+ DROP USER [' + @login_name + ']
36
+ END
37
+
38
+ CREATE USER [' + @login_name + '] FOR LOGIN [' + @login_name + '];'
39
+
40
+ SELECT @user_cmd += 'EXEC sp_addrolemember N''' + DatabaseRole + ''', N''' + @login_name + ''';' FROM @database_roles
41
+
42
+ EXEC (@user_cmd)
43
+
44
+ SELECT * FROM sys.database_principals WHERE name=@login_name
@@ -0,0 +1,11 @@
1
+ IF EXISTS (SELECT * FROM sys.credentials
2
+ WHERE name = '$(credential_name)')
3
+ BEGIN
4
+ ALTER CREDENTIAL [$(credential_name)] WITH IDENTITY = '$(identity)', SECRET = '$(secret)';
5
+ SELECT 'Credential [$(credential_name)] updated.'
6
+ END
7
+ ELSE
8
+ BEGIN
9
+ CREATE CREDENTIAL [$(credential_name)] WITH IDENTITY = '$(identity)', SECRET = '$(secret)';
10
+ SELECT 'Credential [$(credential_name)] created.'
11
+ END
@@ -0,0 +1,20 @@
1
+ DECLARE @login_name nvarchar(max)
2
+ DECLARE @password nvarchar(max)
3
+ DECLARE @user_cmd nvarchar(max)
4
+
5
+ SET @login_name = '$(user)'
6
+ SET @password = '$(password)'
7
+
8
+ -- Create login
9
+ SET @user_cmd =
10
+ 'USE [master]
11
+ IF EXISTS (SELECT name FROM master.dbo.syslogins WHERE name=''' + @login_name + ''')
12
+ BEGIN
13
+ DROP LOGIN [' + @login_name + ']
14
+ END
15
+
16
+ CREATE LOGIN [' + @login_name + '] WITH PASSWORD=N''' + @password + ''', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'
17
+
18
+ EXEC (@user_cmd)
19
+
20
+ SELECT name, CONVERT(NVARCHAR(max), sid, 1) FROM master.dbo.syslogins WHERE name=@login_name