NuRoN Consulting, INC.
Skip over navigation
Home
Blog
About Us
Clients
Contact Us
File Download
Donate for FREE Code
SQL Tools
Databases
DBA
Aggregates
Assemblies
Functions
dbo.fnGetDate
dbo.GetLastMins
dbo.GetSytemWaitStats
dbo.GetVirtualFileStats
dbo.ObjectScriptsGetSnapShot
dbo.SecurityScriptsGetSnapShot
Metadata.GetIndexPhysicalStats
Metadata.GetIOVirtualFileStats
Procedures
dbo.DBFileInfoRefresh
dbo.DropOldTemporaryObjects
dbo.FindSSISSQL
dbo.NotifyLoginFailures
dbo.ObjectScriptsLogCreate
dbo.RedgateScriptSingleDatabase
dbo.SecurityScriptsLogCreate
dbo.SecurityScriptsOrphanCleanup
dbo.SSISPackagesImport
dbo.SSISPackageSplitFileConnections
dbo.SSISPackageSplitSQL
dbo.SystemWaitStatsUpdate
dbo.usp_LastMin
dbo.usp_MissingServers
dbo.usp_populate_SQLServerUsage
dbo.usp_SQLServerMonitor_pivot
dbo.usp_SystemMonitor_Initiate
dbo.VirtualFileStatsIns
Tables
Triggers
Views
dbo.vSQLServerMonitor
Metadata.Assemblies
Metadata.CheckConstraints
Metadata.Columns
Metadata.DatabaseFiles
Metadata.DatabaseFilesAll
Metadata.Defaults
Metadata.Dependencies
Metadata.ExpressionDependencies
Metadata.ExpressionDependencyColumns
Metadata.ForeignKeys
Metadata.FunctionColumns
Metadata.Hobts
Metadata.IndexDetail
Metadata.Indexes
Metadata.IndexPartitionDetails
Metadata.IndexPhysicalStats
Metadata.Objects
Metadata.ObjectScripts
Metadata.PartitionFunctions
Metadata.PartitionRowInfo
Metadata.PartitionSchemes
Metadata.PartitionValues
Metadata.Permissions
Metadata.PermissionsAll
Metadata.PermissionsRecursive
Metadata.PermissionsRecursiveAll
Metadata.Principals
Metadata.PrincipalsAll
Metadata.ProcedureScripts
Metadata.RoleMembers
Metadata.RoleMembersAll
Metadata.RoleMembersRecursive
Metadata.RoleMembersRecursiveAll
Metadata.ServerPrincipals
Metadata.StoredProcedureParams
Metadata.TableColumns
Metadata.Tables
Metadata.TableScripts
Metadata.TableUsage
Metadata.ViewColumns
master
Procedures
sp_BackupFileList
sp_BackupHeaderList
sp_bcp
sp_Column
sp_Compare
sp_CompareDBProcedures
sp_CompareDBTables
sp_compile_proc
sp_CursorScript
sp_DBDrop
sp_DBFileInfo
sp_DBHasChanged
sp_DBRename
sp_DBScript
sp_DependencyReport
sp_ErrorHandler
sp_ExecBatchTerminated
sp_ExecTemplate
sp_FailedJobs
sp_files
sp_FindInvalidLogins
sp_FK
sp_FK_script
sp_GetError
sp_GetInputBuffer
sp_GetStruct
sp_GrantAll
sp_helpindex2
sp_Html
sp_HtmlDetail
sp_index
sp_index_script
sp_Insert
sp_JobHistory
sp_Jobs
sp_join
sp_kill
sp_LogError
sp_Merge
sp_MetadataViewsCreate
sp_MoveSchema
sp_MScleanupmergepublisher
sp_MSrepl_startup
sp_NotifyServerStart
sp_objects
sp_ParamDefault
sp_permissions
sp_PermissionsDBList
sp_pivot
sp_PopulateProc
sp_PrimaryKeyWhere
sp_proc_find
sp_proc_find_DBList
sp_proc_help
sp_Profile
sp_ProfileUnPivot
sp_RenameKeys
sp_Restore
sp_RunningJobs
sp_script
sp_ScriptDB
sp_servers
sp_ShrinkSimpleLog
sp_SingleLookupProc
sp_SQLskills_ExposeColsInIndexLevels
sp_StatsIO
sp_StatsIOComp
sp_SysInfo
sp_SysMon
sp_Table
sp_Table_Script
sp_TableReplace
sp_TableValues
sp_TempTables
sp_text
sp_TSQLJobCreate
sp_unpivot
sp_ViewScript
sp_whoio
sp_whoio_02
sp_wholock
usp_AuditTrace
usp_AuditTrace_SQLStmt
usp_DeadlockTrace
msdb
Procedures
dbo.usp_GetJobExecutionStatus
dbo.usp_purge_jobhistory
dbo.usp_StartJobSynchronous
dbo.usp_WaitForJobs
dbo.usp_GetJobExecutionStatus
dbo.usp_purge_jobhistory
dbo.usp_StartJobSynchronous
dbo.usp_WaitForJobs
Triggers
dbo.trg_sysjobhistory_email_failure
dbo.trg_sysjobhistory_email_failure
Util
Aggregates
dbo.BinaryOrAggregate
dbo.BitMask
dbo.BuildColumnsUpdated
dbo.MEDIAN
dbo.MEDIAN_BIG
dbo.MEDIAN_NUMERIC
dbo.StringConcat
dbo.StringConcatSorted
Assemblies
Accessibility
Microsoft.Data.Schema.ScriptDom
Microsoft.Data.Schema.ScriptDom.Sql
Microsoft.JScript
Microsoft.Vsa
System.Configuration.Install
System.DirectoryServices
System.Drawing
System.Management
System.Runtime.Serialization.Formatters.Soap
System.Windows.Forms
UtilClr
Functions
AD.GetGroupMembers
DBA.ConvertToExtents
dbo.BinaryReverse
dbo.BinaryReverseAndTrim
dbo.BinarySetCount
dbo.BinaryTrim
dbo.BitwiseIn
dbo.CastXML
dbo.CastXMLInline
dbo.CleanHTML
dbo.CombineIntToDateTime
dbo.CompareNamesForOwnerThrowDate
dbo.ConvertSQLtoHTML
dbo.CreateConditionalUpdate
dbo.GenerateAlterScript
dbo.GetColumnType
dbo.GetCPUUsage
dbo.GetDates
dbo.GetDateTimeDifference
dbo.GetNumbers
dbo.GetNumbersInline
dbo.GetPercentage
dbo.GetProcedureFromExecuteSQL
dbo.GetTempTableName
dbo.ImplyingPermissions
dbo.IsNonWhiteSpaceIdentical
dbo.OrderViewColumns
dbo.ParseBitMask
dbo.ParseBitMask_CLR
dbo.ParseByteArrayToCols1024
dbo.ParseByteArrayToCols128
dbo.ParseByteArrayToCols16
dbo.ParseByteArrayToCols256
dbo.ParseByteArrayToCols32
dbo.ParseByteArrayToCols512
dbo.ParseByteArrayToCols64
dbo.ParseByteArrayToCols8
dbo.ParseColumnsUpdated
dbo.ParseColumnsUpdated_CLR
dbo.ParseDelimited
dbo.ParseDelimited_CLR
dbo.ParseDelimitedColumns1024
dbo.ParseDelimitedColumns1024_CLR
dbo.ParseDelimitedColumns128
dbo.ParseDelimitedColumns128_CLR
dbo.ParseDelimitedColumns16
dbo.ParseDelimitedColumns16_CLR
dbo.ParseDelimitedColumns256
dbo.ParseDelimitedColumns256_CLR
dbo.ParseDelimitedColumns32
dbo.ParseDelimitedColumns32_CLR
dbo.ParseDelimitedColumns4
dbo.ParseDelimitedColumns4_CLR
dbo.ParseDelimitedColumns512
dbo.ParseDelimitedColumns512_CLR
dbo.ParseDelimitedColumns64
dbo.ParseDelimitedColumns64_CLR
dbo.ParseDelimitedColumns8
dbo.ParseDelimitedColumns8_CLR
dbo.ParseDelimitedTableColumns32
dbo.ParseDelimitedTableColumns32_CLR
dbo.ParseSPDefaults
dbo.ParseTextQualified
dbo.ProcedureInputDelimitedTable
dbo.QuotenameOptional
dbo.RemoveLeadingZeros
dbo.RemoveLeadingZerosInline
dbo.ReplaceSchemaFromXMLList
dbo.ReplaceTextFromXMLList
dbo.ResolveDecimal
dbo.ResolveDecimal_CLR
dbo.SPParamDefault
dbo.StreetName
dbo.TokenizeSQL
dbo.TrimBothEnds
dbo.TrimEnd
dbo.TrimMultiline
dbo.TrimStart
dbo.TryParseDateIntTimeInt
dbo.TryParseDateTime
dbo.TryParseDecimal
dbo.XMLTable
FS.AppendAllTextToFile
FS.FileCopy
FS.FileDelete
FS.FileMove
FS.FileReplace
FS.FilesDelete
FS.FilesDeleteMatch
FS.GetDirectoryInfo
FS.GetFileInfo
FS.GetVolumeInfo
FS.GetVolumeInfo_CLR
FS.ReadAllTextFromFile
FS.ReadLine
Metadata.GetIndexPhysicalStats
Metadata.GetIOVirtualFileStats
RE.RegExEscape
RE.RegExIndex
RE.RegExIsMatch
RE.RegExMatch
RE.RegExMatches
RE.RegExOptionEnumeration
RE.RegExReplace
RE.RegExReplaceX
RE.RegExSplit
Procedures
DBA.GetChangedExtents
dbo.FixedLengthColumnBuilder
dbo.FixedLengthDefinitionIns
dbo.GetProcessorCount
dbo.GetSQLStatisticsIO
dbo.GetSQLStatisticsIO_CLR
dbo.LineFunctionGeneratorDelimited
dbo.LineFunctionGeneratorFixedLength
dbo.PopulateSystemWaitTypes
dbo.PrintLargeText
dbo.PrintLargeText_CLR
dbo.ProfileImport
dbo.SQLColumnDependencyAppend
dbo.SQLColumnDependencyGet
dbo.usp_CacheTables
dbo.usp_DeadlockReport
dbo.usp_Delete_Older_Files
dbo.usp_DiabloFailedRowDetail
dbo.usp_DiabloFailedRowDetail_GenerateEmail
dbo.usp_populate_DiabloSpecColumnMapping
dbo.usp_populate_DiabloSpecTableMapping
dbo.usp_populate_SSISDataTypes
dbo.usp_populate_SSISErrorCodes
dbo.usp_ServerDataFileReport
dbo.usp_SqlAgentPoll_Cleanup
dbo.usp_SqlAgentPoll_Insert
dbo.usp_SqlAgentPoll_Missing
Tables
Triggers
Views
dbo.DefaultTrace
dbo.ExactNumericDataTypeRanges
dbo.SysInfo
dbo.SystemObjectTypes
dbo.vDiabloFailedRowDetail
Metadata.Assemblies
Metadata.CheckConstraints
Metadata.Columns
Metadata.DatabaseFiles
Metadata.Defaults
Metadata.Dependencies
Metadata.ExpressionDependencies
Metadata.ExpressionDependencyColumns
Metadata.ForeignKeys
Metadata.FunctionColumns
Metadata.Hobts
Metadata.IndexDetail
Metadata.Indexes
Metadata.IndexPartitionDetails
Metadata.IndexPhysicalStats
Metadata.Objects
Metadata.ObjectScripts
Metadata.PartitionFunctions
Metadata.PartitionRowInfo
Metadata.PartitionSchemes
Metadata.PartitionValues
Metadata.Permissions
Metadata.PermissionsRecursive
Metadata.Principals
Metadata.ProcedureScripts
Metadata.RoleMembers
Metadata.RoleMembersRecursive
Metadata.ServerPrincipals
Metadata.StoredProcedureParams
Metadata.TableColumns
Metadata.Tables
Metadata.TableScripts
Metadata.TableUsage
Metadata.ViewColumns
Template Scripts
Active Directory
Linked Server
Admin
Attach DB
Backup History
Cache Tables
Change DB Owner for all databases
Change Dbowner to SA
Change Default Database
Change Default Schema owners to default
Change Job Owner msdb
Change Job Owner
Check Edition
Compare Table Data
Compress Tables
Compression List
Create Join on Index columns
Create login and server member script
Create missing indexes
Create object aliases
Create Snapshot
Create X_ tables
Data Files Split
Database File Usage
Default DB SET
Delete duplicates
Delete Trigger Create
Drop user schemas from system databases
File Usage Batch
File Usage
Foreign Key missing index create
Fragmentation
Generate Ins Upd Del Stored Proc
Generate Primary and, Unique key and Index Script
Get Instances
Get Port Number
Grant Connect Right to all DB users
Grant showplan access
Grant View Definition
Import DTSX contents into a table
Index Dataspace
Index Defrag
Index Fragmentation Status
Index NC Bad vs Missing
Is Database in Full Recovery
Kill Database Process
Last SQL Server and Agent start time
LatLonDistance
List Of Columns
List Of Index Columns
Median
Merge
MSDB Job Duration
New Objects
Orphaned Users
ParseName
PartitionQueries
Print Large Text
Recreate Indexes
Remap Logins
Rename database files
Rename Primary Unique Foreign
Resize Database Files
Restore Corestore
Restore History
Restore List
Restore with standby
Script Foreign Keys
Script Insert Statements
Search SQL Agent Command
Server Properties
SERVERPROPERTY
Set Enviroment Variables
Set Recovery Simple
Shrink Files
Switch Identity Property
Table Row Count
Table RowCount and Index Size
Table usage report on Temporary
Top costly executed statements
Trust Constraints
UseCoreStoreSnapShot
usp_whoio_hist
xp_ReadErrorLog
AuditTrace
Dmitry Troubleshoot
FindCursors
Profile Actions
Setup Startup Procedure
usp_AuditTrace
usp_AuditTrace_SQLStmt
usp_DeadlockTrace
usp_ProfileImport
Backup Restore
Filegroup Restore
Move script for restore
BatchFiles
Copy Dbschema Files
BCP
Export Import All Tables
Binay
Binary char conversions
CDC
CDC ALL
cdc jobs
Error Reporting
Rollback Forward Script
Script cdc schema tables
SQLServerCentral
Troubleshoot
Check Constraint
Duplicate check constraint columns
Rebuild Valid Year
Select all check constraints
Code Tables
Create Tables
Instead of Trigger
Columns
Add Not Null with defaults to bit columns
All Columns
Column Changes
Column Select
Columns Comparison
Columns_Updated
Copy Column Headers and Make it a list
Create views
Find Numeric Column Values
Find Spaces at front of column
Get Column list and clustered index key_ordinal
Get Column List
Key and Foreign Key Columns
Order View Columns
Primary key join create
Rename Columns
Sort View Columns
SQL_Variant
Trim all columns
Data Files
Move for Restore
Database
Available Database List
Create Database
Set Default Options
Date
Packing Date Intervals
Date Calculations
Start and End day of Quarter
DBA
Find Proc SQL
Import SSIS Packages
Monitor Object and Security Scripting
Object Script Logging
Samples
Security Script Logging
Split SSIS File Connections
Split SSIS Packages SQL
SystemWaitTypes
VirtualFileStats
DDL Trigger
Table
Default Trace
Disable Enable
Query Default Trace
Dependencies
Object Column Dependencies
SQL Column Dependencies
Diagnostic
Blocked connection info
Diagnostic Info
Missing Index
MissingIndexes
Session Info
Show Lock Info
DMV
Connection Info
DMV 01
DMV 02
DMV Starter Pack
Documentation
System Proc Doc
Extended Properties
Add update drop select extended property
DropOrUpdateExistingExtendedProperties
GetCurrentAndMissingExtendedProperties
GetExtendedProperties
GetExtendedPropertiesForDelete
GetExtendedPropertiesForModification
Overview
PrepareDocumentableObjects
SetIndividualExtendedProperties
Extract
ExtractTablesView
FileIO
File Copy Test
Volume analysis
FOREIGN KEY
Find Missing Values
ForeignKeyTable
Functions
Get function definitions
GRANT
VIEW SERVER STATE
IndexDefrag
dba_indexDefrag_sp
Defrag Report
Indexes
Indexes Table
IndexPhysicalStats
Inferred Matching
Reset Service Control
Inline Function
Inline Function Sample
IO
Latency
Joins
Trans Mort Prop Address
LineParser
Create All functions
Create ColumnDef Type
Delimited function generator
Substring function generator
Linked Server
Linked Server Test
LiteSpeed
Backup Database
Delete Old Backup Files
Diablo Restore
Settings
Local
Restore Diablo
Locks
Locking prior to process start
Locking rows or partition
Login
sp_change_users_login
master
Memory
Memory Grants
Memory Usage by object
Misc
FNMA
Median
Parse dir cmd
Recreate Table Index
States
msdb
After restoring msdb follow these steps
Clear notify email operator
Create alert operator notification_method list
Current running jobs
Disable notification
Find Job Step
GRANT EXEC xp_sqlagent proc to public
jobs view
Last Restore Date
Replace DTLogExec
Set Include step in output history
Split jobs to SSIS and SQL
ssispackages
Update JobStep Command
Parallel Execute
Parallel Execute
Partition
Drop Partitioned Tables
GetPartitionID
Inspect Partitions
ListPartitionValues
Partition Compression Report
Performance Counters
Page Life Expectancy
Total Server Memory
Permissions
Troubleshoot Permissions
Procedure Defaults
Test Procedure Defaults
Profile
Analyze grouped profile
Analyze Load Control Differences
RAISERROR
Raiserror
RegEx
RegExSamples
Restore Master Key
Restore Master Key
Schema
Alter authorization to defaults
Cleanup user schemas
Drop objects belonging to Schema and schema
Drop User Schemas
Search
Search any character field
SELECT
Horizontal Aggregate
VALUES
Server
Rename Server
Service Broker
04 Tutorial Beginning a Conversation
05 Tutorial Receiving Request
06 Tutorial Receiving Reply
Code Generator
Create Service Account Logins
Original Tutorial
Setup Que
Setup Tables
System tables
Test
Troubleshoot
Service Broker Generic
Code Generator
Setup Que
Setup Tables
System tables
Test
Special User Access
SQL Agent Jobs
Change Job Owner
Email Deadlock Info
Email Job Disable Enable
Find Service Account
JobScript_FindConflictingJobSchedules
JobScript_FindMissedJobs
SQL Agent Schedule View
Trigger to email jobs
SQLCompare
SSIS
Data Types
Fixed Length Column Builder
New Fixed Length
Query fileconnections
ssispackages
StatsIO
ParseLogicalReads
ParseLogicalReads2
Stored Procedure
Generate Execution Script
Strings
Replace database names
Replace Multiple spaces to one space
System Objects
All Objects by modified date
Find Object definition
Hierarchy Union ALL
Object Types
Write all definitions to text
System Proc
msdb.dbo.usp_FailedJobs
msdb.dbo.usp_GetJobExecutionStatus
msdb.dbo.usp_purge_jobhistory
msdb.dbo.usp_StartJobSynchronous
msdb.dbo.usp_WaitForJobs
sp_BackupFileList
sp_BackupHeaderList
sp_bcp
sp_Column
sp_Compare
sp_CompareDBProcedures
sp_CompareDBPTables
sp_compile_proc
sp_CursorScript
sp_DBDrop
sp_DBFileInfo
sp_DBHasChanged
sp_DBRename
sp_DBScript
sp_DependencyReport
sp_ErrorHandler
sp_ExecBatchTerminated
sp_ExecTemplate
sp_FailedJobs
sp_files
sp_FindInvalidLogins
sp_FK
sp_FK_script
sp_GetError
sp_GetInputBuffer
sp_GetStruct
sp_GrantAll
sp_helpindex2
sp_Html
sp_HtmlDetail
sp_index
sp_index_script
sp_insert
sp_JobHistory
sp_Jobs
sp_Join
sp_Kill
sp_LogError
sp_merge
sp_MetadataViewsCreate
sp_MoveSchema
sp_NotifyServerStart
sp_objects
sp_ParamDefault
sp_permissions
sp_PermissionsDBList
sp_pivot
sp_PopulateProc
sp_PrimaryKeyWhere
sp_proc_find
sp_proc_find_DBList
sp_proc_help
sp_profile
sp_ProfileUnPivot
sp_RenameKeys
sp_Restore
sp_RunningJobs
sp_script
sp_ScriptDB
sp_servers
sp_ShrinkSimpleLog
sp_SingleLookupProc
sp_SQLskills_ExposeColsInIndexLevels
sp_StatsIO
sp_StatsIOComp
sp_SysInfo
sp_SysMon
sp_Table
sp_Table_Script
sp_TableReplace
sp_TableValues
sp_TempTables
sp_text
sp_TSQLJobCreate
sp_unpivot
sp_ViewScript
sp_whoio
sp_whoio_02
sp_wholock
usp_AuditTrace
usp_AuditTrace_SQLStmt
usp_DeadlockTrace
Table
Table script from tab delimited
Tables List
Table Stats
How Many Pages are compressed
Update And Scan statistics
TempDB
Session Usage
Template Procedures
Exec Expression
Tests
sp_whoio capture memory
TransDeed Test
TransLien PropId Test
Trace
MergePropertyAndBuilding SQLSTMT
Transactions
Open Transactions
Triggers
Disable or Enable Triggers
Troubleshoot
Failed Index
Users
Change Default DB
Cleanup unused database users
Create Logins
Database Group Members
Database Permissions
Delete Unused Users
Drop and non sysadmin users
Get recursive user permissions from multiple databases
Recreate Windows Groups as Logins
sp_help_revlogin
SysAdmin List
Windows User List
Util
Backup Util and DBA
Delete all temp and log files
DiabloSpecMapping
Drop All to Redeploy
Grant access to all logins
ReplaceCoalesce
Set Trustworthy ON
SPParamDefault
Utility
File Replacement for the line
Views
List View Columns
WAITS
Cumulative
Difference 01
Difference 02
Difference 03
WorkingOn
DiabloLoadCombinerGeneratedQ2
DiabloLoadCombinerGeneratedQ3
DiabloLoadCombinerGeneratedQ4
DiabloLoadCombinerGenerator
TransTest
XML
Cast string as XML
Cross Apply
Double function test 2
Double function test
FOR XML Path
FOR XML
OPENROWSET
Parameter Passing
Print Large Text with XML
Query SSIS packages
Reading XML
Replace XML Escape
XML Retrieve Element
XMLTable
Blog
>
SQL Tools
>
Template Scripts
>
System Proc
>
sp_script
Template Script: System Proc\sp_script.sql
USE
MASTER
GO
IF
OBJECT_ID
(
'sp_script'
)
IS
NULL
EXEC
(
'CREATE PROCEDURE sp_script AS SELECT 1 AS ID'
)
GO
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
ALTER
PROCEDURE
sp_script
@ObjectName
SYSNAME
=
NULL
,
/* NULL for all, supports like */
@SchemaName
SYSNAME
=
NULL
,
/* NULL for all, supports like */
@ObjectList
XML
=
NULL
,
/* Will overwrite @ObjectName */
@NewSchemaName
SYSNAME
=
NULL
,
/* NULL to scripts objects in original schema, any value overwrites */
@NewTableName
SYSNAME
=
NULL
,
/* This can be used if only one table is scripted, it will change the table name */
@NewDatabaseName
SYSNAME
=
NULL
,
/* To change the database context */
@NewFileGroup
SYSNAME
=
NULL
,
/* A new filegroup for all objects created can be given or a full partition schema with column) */
@NewPartition
SYSNAME
=
NULL
,
/* Full partition clause with the parameter like 'psDatasupplierIdTrans(DataSupplierId)' */
@NewDataCompression
SYSNAME
=
NULL
,
/* A blank value will not script datacompression options, any value will create all objects with the new data compression */
@AddNamePrefix
SYSNAME
=
NULL
,
/* Adds a prefix to table and constraint names being created */
@ReplaceReferenceSchemaFrom
SYSNAME
=
NULL
,
/* ** For foreign key constrainst you can replace a referenced schema name @ReplaceReferenceSchemaFrom as @ReplaceReferenceSchemaTo */
@ReplaceReferenceSchemaTo
SYSNAME
=
NULL
,
/* ** Used in conjunction with @ReplaceReferenceSchemaFrom*/
@DropForeignKey
BIT
=
0
,
@DropTable
BIT
=
0
,
@DropDefaultConstraints
BIT
=
0
,
/* This will drop default constraints */
@DropClusteredIndex
BIT
=
0
,
@DropNonClusteredIndex
BIT
=
0
,
@DropPrimaryKey
BIT
=
0
,
@DropUniqueKey
BIT
=
0
,
@DropIndex
BIT
=
0
,
@DropCheckConstraint
BIT
=
0
,
@DropFunction
BIT
=
0
,
@DropProcedure
BIT
=
0
,
@DropTrigger
BIT
=
0
,
@DropView
BIT
=
0
,
@CreateTable
BIT
=
0
,
/* Table will always be created with it's defaults */
@CreateTableInOneStep
BIT
=
0
,
@IncludeSchemaBoundObjects
BIT
=
0
,
@CreateDefaultConstraints
BIT
=
0
,
/* This will create default constraints */
@EnableNonClusteredIndex
BIT
=
0
,
@EnableUniqueKey
BIT
=
0
,
@EnableIndex
BIT
=
0
,
@DisableNonClusteredIndex
BIT
=
0
,
@DisableUniqueKey
BIT
=
0
,
@DisableIndex
BIT
=
0
,
@CreateClusteredIndex
BIT
=
0
,
@CreateNonClusteredIndex
BIT
=
0
,
@CreatePrimaryKey
BIT
=
0
,
@CreateUniqueKey
BIT
=
0
,
@CreateIndex
BIT
=
0
,
@CreateForeignKey
BIT
=
0
,
@CreateForeignKeyInTwoSteps
BIT
=
0
,
@CreateCheckConstraint
BIT
=
0
,
@CreateCheckConstraintInTwoSteps
BIT
=
0
,
@CreateFunction
BIT
=
0
,
@CreateProcedure
BIT
=
0
,
@CreateTrigger
BIT
=
0
,
@CreateView
BIT
=
0
,
@AlterProcedures
BIT
=
0
,
@CreateSETANSI
BIT
=
0
,
@IgnoreDisabledForeignKey
BIT
=
0
,
@IgnoreDisabledCheckConstraint
BIT
=
0
,
@SortInTempDb
BIT
=
1
,
@Fillfactor
TINYINT
=
NULL
,
@Online
BIT
=
0
,
@AllowRowLocks
BIT
=
NULL
,
@AllowPageLocks
BIT
=
NULL
,
@PadIndex
BIT
=
NULL
,
@MAXDOP
TINYINT
=
0
,
@SortTableColumns
BIT
=
0
,
@GenerateIfNotExists
BIT
=
0
,
@UseGOBatchTerminator
BIT
=
0
,
@IncludeMSShipped
BIT
=
0
,
@ExcludeSchemaList
VARCHAR
(
MAX
)
=
'cdc,sys,Metadata'
,
@ExcludeSchemaDelimiter
VARCHAR
(
10
)
=
','
,
@SQL
VARCHAR
(
MAX
)
=
NULL
OUTPUT
,
/* This will append to the passed value */
@PrintSQL
BIT
=
0
,
@ReturnRecordset
BIT
=
0
,
@ExecuteSQL
BIT
=
0
,
/* Executes the generated sql statement */
@UseTransaction
BIT
=
0
,
/* SQL script will be executed within a transaction */
@RtrimLines
BIT
=
1
,
@UseObjectIdForDrop
BIT
=
1
,
@recipients
NVARCHAR
(
1000
)
=
NULL
,
@subject
NVARCHAR
(
1000
)
=
NULL
,
@FilePath
VARCHAR
(
4000
)
=
NULL
/* Will write the generated sql to the path */
AS
SET
NOCOUNT
ON
SET
TRANSACTION
ISOLATION
LEVEL
READ
UNCOMMITTED
SET
ANSI_WARNINGS
OFF
--#region SET BACK NULLS TO DEFAULTS
SELECT
@DropForeignKey
=
ISNULL
(
@DropForeignKey
,
0
)
,
@DropTable
=
ISNULL
(
@DropTable
,
0
)
,
@DropDefaultConstraints
=
ISNULL
(
@DropDefaultConstraints
,
0
)
,
@DropClusteredIndex
=
ISNULL
(
@DropClusteredIndex
,
0
)
,
@DropNonClusteredIndex
=
ISNULL
(
@DropNonClusteredIndex
,
0
)
,
@DropPrimaryKey
=
ISNULL
(
@DropPrimaryKey
,
0
)
,
@DropUniqueKey
=
ISNULL
(
@DropUniqueKey
,
0
)
,
@DropIndex
=
ISNULL
(
@DropIndex
,
0
)
,
@DropCheckConstraint
=
ISNULL
(
@DropCheckConstraint
,
0
)
,
@DropFunction
=
ISNULL
(
@DropFunction
,
0
)
,
@DropProcedure
=
ISNULL
(
@DropProcedure
,
0
)
,
@DropTrigger
=
ISNULL
(
@DropTrigger
,
0
)
,
@DropView
=
ISNULL
(
@DropView
,
0
)
,
@CreateTable
=
ISNULL
(
@CreateTable
,
0
)
,
@CreateTableInOneStep
=
ISNULL
(
@CreateTableInOneStep
,
0
)
,
@IncludeSchemaBoundObjects
=
ISNULL
(
@IncludeSchemaBoundObjects
,
0
)
,
@CreateDefaultConstraints
=
ISNULL
(
@CreateDefaultConstraints
,
0
)
,
@EnableNonClusteredIndex
=
ISNULL
(
@EnableNonClusteredIndex
,
0
)
,
@EnableUniqueKey
=
ISNULL
(
@EnableUniqueKey
,
0
)
,
@EnableIndex
=
ISNULL
(
@EnableIndex
,
0
)
,
@DisableNonClusteredIndex
=
ISNULL
(
@DisableNonClusteredIndex
,
0
)
,
@DisableUniqueKey
=
ISNULL
(
@DisableUniqueKey
,
0
)
,
@DisableIndex
=
ISNULL
(
@DisableIndex
,
0
)
,
@CreateClusteredIndex
=
ISNULL
(
@CreateClusteredIndex
,
0
)
,
@CreateNonClusteredIndex
=
ISNULL
(
@CreateNonClusteredIndex
,
0
)
,
@CreatePrimaryKey
=
ISNULL
(
@CreatePrimaryKey
,
0
)
,
@CreateUniqueKey
=
ISNULL
(
@CreateUniqueKey
,
0
)
,
@CreateIndex
=
ISNULL
(
@CreateIndex
,
0
)
,
@CreateForeignKey
=
ISNULL
(
@CreateForeignKey
,
0
)
,
@CreateForeignKeyInTwoSteps
=
ISNULL
(
@CreateForeignKeyInTwoSteps
,
0
)
,
@CreateCheckConstraint
=
ISNULL
(
@CreateCheckConstraint
,
0
)
,
@CreateCheckConstraintInTwoSteps
=
ISNULL
(
@CreateCheckConstraintInTwoSteps
,
0
)
,
@CreateFunction
=
ISNULL
(
@CreateFunction
,
0
)
,
@CreateProcedure
=
ISNULL
(
@CreateProcedure
,
0
)
,
@CreateTrigger
=
ISNULL
(
@CreateTrigger
,
0
)
,
@CreateView
=
ISNULL
(
@CreateView
,
0
)
,
@AlterProcedures
=
ISNULL
(
@AlterProcedures
,
0
)
,
@CreateSETANSI
=
ISNULL
(
@CreateSETANSI
,
0
)
,
@IgnoreDisabledForeignKey
=
ISNULL
(
@IgnoreDisabledForeignKey
,
0
)
,
@IgnoreDisabledCheckConstraint
=
ISNULL
(
@IgnoreDisabledCheckConstraint
,
0
)
,
@SortInTempDb
=
ISNULL
(
@SortInTempDb
,
1
)
,
@Online
=
ISNULL
(
@Online
,
0
)
,
@MAXDOP
=
ISNULL
(
@MAXDOP
,
0
)
,
@SortTableColumns
=
ISNULL
(
@SortTableColumns
,
0
)
,
@GenerateIfNotExists
=
ISNULL
(
@GenerateIfNotExists
,
0
)
,
@UseGOBatchTerminator
=
ISNULL
(
@UseGOBatchTerminator
,
0
)
,
@IncludeMSShipped
=
ISNULL
(
@IncludeMSShipped
,
0
)
,
@ExcludeSchemaList
=
ISNULL
(
@ExcludeSchemaList
,
'cdc,sys'
)
,
@ExcludeSchemaDelimiter
=
ISNULL
(
NULLIF
(
Util
.
dbo
.
TrimBothEnds
(
@ExcludeSchemaDelimiter
)
,
''
)
,
','
)
,
@PrintSQL
=
ISNULL
(
@PrintSQL
,
0
)
,
@ReturnRecordset
=
ISNULL
(
@ReturnRecordset
,
0
)
,
@ExecuteSQL
=
ISNULL
(
@ExecuteSQL
,
0
)
,
@UseTransaction
=
ISNULL
(
@UseTransaction
,
0
)
,
@RtrimLines
=
ISNULL
(
@RtrimLines
,
1
)
,
@UseObjectIdForDrop
=
ISNULL
(
@UseObjectIdForDrop
,
1
)
--#endregion
DECLARE
@IndexEnabledError
VARCHAR
(
MAX
)
=
SUBSTRING
(
CASE
WHEN
(
@EnableNonClusteredIndex
=
1
AND
@DisableNonClusteredIndex
=
1
)
THEN
',@EnableNonClusteredIndex AND @DisableNonClusteredIndex SET'
ELSE
''
END
+
CASE
WHEN
(
@EnableUniqueKey
=
1
AND
@DisableUniqueKey
=
1
)
THEN
',@EnableUniqueKey AND @DisableUniqueKey SET'
ELSE
''
END
+
CASE
WHEN
(
@EnableIndex
=
1
AND
@DisableIndex
=
1
)
THEN
',@EnableIndex AND @DisableIndex SET'
ELSE
''
END
,
2
,
1000
)
,
@IgnoreListCount
INT
=
0
IF
@IndexEnabledError
<
>
''
BEGIN
RAISERROR
(
@IndexEnabledError
,
16
,
1
)
RETURN
30
END
IF
OBJECT_ID
(
'TEMPDB..#IgnoreList'
)
IS
NULL
CREATE
TABLE
#IgnoreList
(
OBJECT_ID
INT
NOT
NULL
PRIMARY
KEY
CLUSTERED
)
ELSE
SELECT
@IgnoreListCount
=
COUNT
(
*
)
FROM
#IgnoreList
DECLARE
@SilentOperation
BIT
=
CASE
WHEN
OBJECT_ID
(
'tempdb..#sp_script'
)
IS
NOT
NULL
THEN
1
ELSE
0
END
SELECT
@ObjectName
=
Util
.
dbo
.
TrimBothEnds
(
@ObjectName
)
,
@CreateTableInOneStep
=
CASE
WHEN
@CreateTable
=
1
THEN
@CreateTableInOneStep
ELSE
0
END
IF
@SilentOperation
=
0
CREATE
TABLE
#sp_script
(
OrderId
INT
NOT
NULL
PRIMARY
KEY
CLUSTERED
,
SchemaName
SYSNAME
NOT
NULL
,
TableName
SYSNAME
NOT
NULL
,
ObjectName
VARCHAR
(
256
)
NULL
,
TYPE
VARCHAR
(
2
)
NOT
NULL
,
CreateScript
BIT
NULL
,
IndexId
INT
NOT
NULL
,
Script
VARCHAR
(
MAX
)
NULL
)
/* @ObjectList XML Format
-- SELECT s.name AS schemaname, t.name FROM sys.tables t INNER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE s.name = 'ttrans' FOR XML RAW('Tables')
*/
IF
ISNULL
(
@DropForeignKey
,
0
)
=
0
AND
ISNULL
(
@DropTable
,
0
)
=
0
AND
ISNULL
(
@CreateTable
,
0
)
=
0
AND
ISNULL
(
@EnableNonClusteredIndex
,
0
)
=
0
AND
ISNULL
(
@EnableUniqueKey
,
0
)
=
0
AND
ISNULL
(
@EnableIndex
,
0
)
=
0
AND
ISNULL
(
@DisableNonClusteredIndex
,
0
)
=
0
AND
ISNULL
(
@DisableUniqueKey
,
0
)
=
0
AND
ISNULL
(
@DisableIndex
,
0
)
=
0
AND
ISNULL
(
@DropIndex
,
0
)
=
0
AND
ISNULL
(
@DropClusteredIndex
,
0
)
=
0
AND
ISNULL
(
@DropNonClusteredIndex
,
0
)
=
0
AND
ISNULL
(
@DropPrimaryKey
,
0
)
=
0
AND
ISNULL
(
@DropUniqueKey
,
0
)
=
0
AND
ISNULL
(
@DropDefaultConstraints
,
0
)
=
0
AND
ISNULL
(
@CreateDefaultConstraints
,
0
)
=
0
AND
ISNULL
(
@CreatePrimaryKey
,
0
)
=
0
AND
ISNULL
(
@CreateUniqueKey
,
0
)
=
0
AND
ISNULL
(
@CreateIndex
,
0
)
=
0
AND
ISNULL
(
@CreateClusteredIndex
,
0
)
=
0
AND
ISNULL
(
@CreateNonClusteredIndex
,
0
)
=
0
AND
ISNULL
(
@CreateForeignKey
,
0
)
=
0
AND
ISNULL
(
@DropCheckConstraint
,
0
)
=
0
AND
ISNULL
(
@DropTrigger
,
0
)
=
0
AND
ISNULL
(
@CreateCheckConstraint
,
0
)
=
0
AND
ISNULL
(
@CreateTrigger
,
0
)
=
0
AND
ISNULL
(
@DropFunction
,
0
)
=
0
AND
ISNULL
(
@DropProcedure
,
0
)
=
0
AND
ISNULL
(
@DropTrigger
,
0
)
=
0
AND
ISNULL
(
@DropView
,
0
)
=
0
AND
ISNULL
(
@CreateFunction
,
0
)
=
0
AND
ISNULL
(
@CreateProcedure
,
0
)
=
0
AND
ISNULL
(
@CreateTrigger
,
0
)
=
0
AND
ISNULL
(
@CreateView
,
0
)
=
0
BEGIN
PRINT
'/* ****************** DESCRIPTION OF PARAMETERS ******************
@ObjectName sysname = NULL, -- Fully qualified name or NULL for all, supports like
@SchemaName sysname = NULL -- NULL for all, supports like
@ObjectList XML = NULL --
@NewSchemaName sysname = NULL -- NULL to scripts objects in original schema, any value overwrites
@NewTableName sysname = NULL -- This can be used if only one table is scripted, it will change the table name
@NewDatabaseName sysname = NULL -- To change the database context
@NewFileGroup sysname = NULL -- A new filegroup for all objects created can be given or a full partition schema with column)
@NewPartition sysname = NULL -- Full partition clause with the parameter like ''psDatasupplierIdTrans(DataSupplierId)''
@NewDataCompression sysname = NULL -- A blank value will not script datacompression options, any value will create all objects with the new data compression
@AddNamePrefix sysname = NULL -- Adds a prefix to table and constraint names being created
@ReplaceReferenceSchemaFrom sysname = NULL -- ** For foreign key constrainst you can replace a referenced schema name @ReplaceReferenceSchemaFrom as @ReplaceReferenceSchemaTo
@ReplaceReferenceSchemaTo sysname = NULL -- Used in conjunction with @ReplaceReferenceSchemaFrom
****************** DESCRIPTION OF PARAMETERS ****************** */
-- Using #IgnoreList and #ObjectList Temp tables the input object list can be further customized
/*
CREATE TABLE #IgnoreList(
object_id int not null,
PRIMARY KEY CLUSTERED(object_id))
CREATE TABLE #ObjectList(
SchemaName varchar(256) NULL,
Name varchar(256) NULL
UNIQUE CLUSTERED (SchemaName, Name))
INSERT #ObjectList (SchemaName, Name)
VALUES (''a'',''bb'')
*/
-- If #sp_script exists the script will be stored in that table
/*
IF OBJECT_ID(''TEMPDB..#sp_script'') IS NOT NULL DROP TABLE #sp_script
CREATE TABLE #sp_script (OrderId INT NOT NULL PRIMARY KEY CLUSTERED,
SchemaName SYSNAME NOT NULL,
TableName SYSNAME NOT NULL,
ObjectName VARCHAR(256) NULL,
TYPE VARCHAR(2) NOT NULL,
CreateScript BIT NULL,
IndexId int NOT NULL,
Script VARCHAR(MAX) NULL)
*/
'
EXEC
master
.
dbo
.
sp_ExecTemplate
@ObjectName
=
'sp_script'
,
@PrintDefault
=
0
,
@DeclareReturn
=
0
,
@PrintReturnLine
=
0
,
@DoNotDeclareVar
=
1
RETURN
2
END
DECLARE
@BatchTerminator
VARCHAR
(
10
)
=
CASE
WHEN
(
@UseGOBatchTerminator
=
1
AND
ISNULL
(
@ExecuteSQL
,
0
)
=
0
)
OR
(
ISNULL
(
@ReturnRecordset
,
0
)
=
0
AND
(
@CreateFunction
=
1
OR
@CreateProcedure
=
1
OR
@CreateTrigger
=
1
OR
@CreateView
=
1
)
)
THEN
'GO
'
ELSE
''
END
DECLARE
@ObjectTypes
TABLE
(
TYPE
VARCHAR
(
10
)
COLLATE
Latin1_General_CI_AS_KS_WS
NOT
NULL
PRIMARY
KEY
CLUSTERED
,
TypeName
VARCHAR
(
30
)
NOT
NULL
,
OnlySchemaBound
BIT
NOT
NULL
)
INSERT
@ObjectTypes
(
TYPE
,
TypeName
,
OnlySchemaBound
)
SELECT
'FN'
AS
TYPE
,
'FUNCTION'
AS
TypeName
,
0
AS
OnlySchemaBound
WHERE
(
@DropFunction
=
1
OR
@CreateFunction
=
1
)
UNION
ALL
SELECT
'IF'
AS
TYPE
,
'FUNCTION'
AS
TypeName
,
CASE
WHEN
@DropFunction
=
1
OR
@CreateFunction
=
1
THEN
0
ELSE
1
END
AS
OnlySchemaBound
WHERE
(
@DropFunction
=
1
OR
@CreateFunction
=
1
)
OR
(
@CreateTable
=
1
AND
@IncludeSchemaBoundObjects
=
1
)
UNION
ALL
SELECT
'TF'
AS
TYPE
,
'FUNCTION'
AS
TypeName
,
0
AS
OnlySchemaBound
WHERE
(
@DropFunction
=
1
OR
@CreateFunction
=
1
)
UNION
ALL
SELECT
'P'
AS
TYPE
,
'PROCEDURE'
AS
TypeName
,
0
AS
OnlySchemaBound
WHERE
(
@CreateProcedure
=
1
OR
@DropProcedure
=
1
)
UNION
ALL
SELECT
'V'
AS
TYPE
,
'VIEW'
AS
TypeName
,
CASE
WHEN
@DropView
=
1
OR
@CreateView
=
1
THEN
0
ELSE
1
END
AS
OnlySchemaBound
WHERE
(
@DropView
=
1
OR
@CreateView
=
1
OR
(
@CreateTable
=
1
AND
@IncludeSchemaBoundObjects
=
1
)
)
UNION
ALL
SELECT
'TR'
AS
TYPE
,
'TRIGGER'
AS
TypeName
,
CASE
WHEN
@DropTrigger
=
1
OR
@CreateTrigger
=
1
THEN
0
ELSE
1
END
AS
OnlySchemaBound
WHERE
(
@DropTrigger
=
1
OR
@CreateTrigger
=
1
)
OR
(
@CreateTable
=
1
AND
@IncludeSchemaBoundObjects
=
1
)
UNION
ALL
--SELECT 'D' AS TYPE,
-- 'DEFAULT' AS TypeName
--UNION ALL
SELECT
'U'
AS
TYPE
,
'TABLE'
AS
TypeName
,
0
AS
OnlySchemaBound
WHERE
(
@DropTable
=
1
OR
@CreateTable
=
1
OR
@EnableNonClusteredIndex
=
1
OR
@EnableUniqueKey
=
1
OR
@EnableIndex
=
1
OR
@DisableNonClusteredIndex
=
1
OR
@DisableUniqueKey
=
1
OR
@DisableIndex
=
1
OR
@DropForeignKey
=
1
OR
@DropDefaultConstraints
=
1
OR
@DropIndex
=
1
OR
@DropClusteredIndex
=
1
OR
@DropNonClusteredIndex
=
1
OR
@DropPrimaryKey
=
1
OR
@DropUniqueKey
=
1
OR
@DropCheckConstraint
=
1
OR
@CreateDefaultConstraints
=
1
OR
@CreateClusteredIndex
=
1
OR
@CreateNonClusteredIndex
=
1
OR
@CreatePrimaryKey
=
1
OR
@CreateUniqueKey
=
1
OR
@CreateIndex
=
1
OR
@CreateForeignKey
=
1
OR
@CreateCheckConstraint
=
1
)
IF
OBJECT_ID
(
'tempdb..#Objects'
)
IS
NOT
NULL
DROP
TABLE
#Objects
CREATE
TABLE
#Objects
(
OBJECT_ID
INT
NOT
NULL
PRIMARY
KEY
CLUSTERED
,
SchemaName
SYSNAME
NOT
NULL
,
ObjectName
SYSNAME
NOT
NULL
,
TYPE
CHAR
(
2
)
NOT
NULL
,
TypeName
VARCHAR
(
30
)
NOT
NULL
,
lock_escalation_desc
VARCHAR
(
100
)
NULL
,
uses_ansi_nulls
BIT
NULL
)
IF
@ObjectList
IS
NOT
NULL
OR
OBJECT_ID
(
'tempdb..#ObjectList'
)
IS
NOT
NULL
BEGIN
DECLARE
@ObjectIncludeList
TABLE
(
SchemaName
SYSNAME
NULL
,
ObjectName
SYSNAME
NULL
)
DECLARE
@ObjectExludeList
TABLE
(
SchemaName
SYSNAME
NULL
,
ObjectName
SYSNAME
NULL
)
IF
@ObjectList
IS
NOT
NULL
INSERT
@ObjectIncludeList
(
SchemaName
,
ObjectName
)
SELECT
DISTINCT
t
.
item
.
value
(
'@schemaname'
,
'sysname'
)
AS
SchemaName
,
t
.
item
.
value
(
'@name'
,
'sysname'
)
AS
ObjectName
FROM
@ObjectList
.
nodes
(
'/Tables'
)
AS
t
(
item
)
ELSE
INSERT
@ObjectIncludeList
(
SchemaName
,
ObjectName
)
SELECT
DISTINCT
SchemaName
,
Name
FROM
#ObjectList
;
WITH
s1
AS
(
SELECT
tb
.
OBJECT_ID
,
ISNULL
(
@NewSchemaName
,
sc
.
name
)
AS
SchemaName
,
ISNULL
(
@AddNamePrefix
,
''
)
+
ISNULL
(
@NewTableName
,
tb
.
name
)
AS
ObjectName
,
tb
.
type
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
AS
TYPE
,
ot
.
TypeName
,
ISNULL
(
tt
.
lock_escalation_desc
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
,
''
)
AS
lock_escalation_desc
,
tt
.
uses_ansi_nulls
FROM
sys.schemas
AS
sc
WITH
(
NOLOCK
)
INNER
JOIN
sys.objects
AS
tb
WITH
(
NOLOCK
)
ON
sc
.
SCHEMA_ID
=
tb
.
SCHEMA_ID
INNER
JOIN
@ObjectTypes
ot
ON
ot
.
TYPE
=
tb
.
Type
LEFT
OUTER
JOIN
sys.tables
tt
WITH
(
NOLOCK
)
ON
tt
.
OBJECT_ID
=
tb
.
OBJECT_ID
WHERE
ot
.
OnlySchemaBound
=
0
AND
EXISTS
(
SELECT
*
FROM
@ObjectIncludeList
tl
WHERE
(
tl
.
SchemaName
IS
NULL
OR
tl
.
SchemaName
=
sc
.
name
)
AND
(
tl
.
ObjectName
IS
NULL
OR
tl
.
ObjectName
=
tb
.
name
)
)
AND
(
@IgnoreListCount
=
0
OR
(
@IgnoreListCount
>
0
AND
NOT
EXISTS
(
SELECT
*
FROM
#IgnoreList
il
WHERE
il
.
OBJECT_ID
=
TB
.
OBJECT_ID
)
)
)
)
INSERT
#Objects
WITH
(
TABLOCK
)
(
OBJECT_ID
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
)
SELECT
OBJECT_ID
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
FROM
(
SELECT
OBJECT_ID
,
ROW_NUMBER
(
)
OVER
(
PARTITION
BY
OBJECT_ID
ORDER
BY
(
SELECT
0
)
)
AS
ROW
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
FROM
(
SELECT
OBJECT_ID
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
FROM
s1
UNION
ALL
SELECT
o
.
OBJECT_ID
,
ISNULL
(
@NewSchemaName
,
s
.
name
)
AS
SchemaName
,
ISNULL
(
@AddNamePrefix
,
''
)
+
ISNULL
(
@NewTableName
,
o
.
name
)
AS
ObjectName
,
o
.
type
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
AS
TYPE
,
ot
.
TypeName
,
''
AS
lock_escalation_desc
,
sm
.
uses_ansi_nulls
FROM
sys.sql_expression_dependencies
ed
(
NOLOCK
)
INNER
JOIN
sys.objects
o
(
NOLOCK
)
ON
ed
.
referencing_id
=
o
.
OBJECT_ID
INNER
JOIN
sys.sql_modules
sm
(
NOLOCK
)
ON
sm
.
OBJECT_ID
=
o
.
OBJECT_ID
INNER
JOIN
sys.schemas
s
(
NOLOCK
)
ON
s
.
SCHEMA_ID
=
o
.
SCHEMA_ID
INNER
JOIN
s1
ON
ed
.
referenced_id
=
s1
.
OBJECT_ID
INNER
JOIN
@ObjectTypes
ot
ON
ot
.
TYPE
=
o
.
Type
AND
ot
.
OnlySchemaBound
=
1
WHERE
ed
.
is_schema_bound_reference
=
1
AND
ed
.
referencing_class
=
1
AND
ed
.
referenced_minor_id
=
0
AND
o
.
type
IN
(
'V'
,
'FN'
,
'IF'
,
'TF'
,
'P'
)
AND
@IncludeSchemaBoundObjects
=
1
AND
@CreateTable
=
1
)
k
)
K
WHERE
ROW
=
1
OPTION
(
RECOMPILE
)
END
ELSE
IF
(
@ObjectName
LIKE
'#%'
AND
OBJECT_ID
(
@ObjectName
)
IS
NOT
NULL
)
OR
(
PARSENAME
(
@ObjectName
,
1
)
<
>
''
AND
(
PARSENAME
(
@ObjectName
,
2
)
<
>
''
OR
(
PARSENAME
(
@ObjectName
,
3
)
<
>
''
AND
@ObjectName
LIKE
'%..%'
)
)
)
BEGIN
;
WITH
s1
AS
(
SELECT
tb
.
OBJECT_ID
,
ISNULL
(
@NewSchemaName
,
sc
.
name
)
AS
SchemaName
,
ISNULL
(
@AddNamePrefix
,
''
)
+
ISNULL
(
@NewTableName
,
tb
.
name
)
AS
ObjectName
,
tb
.
type
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
AS
TYPE
,
ot
.
TypeName
,
ISNULL
(
tt
.
lock_escalation_desc
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
,
''
)
AS
lock_escalation_desc
,
tt
.
uses_ansi_nulls
FROM
sys.schemas
AS
sc
WITH
(
NOLOCK
)
INNER
JOIN
sys.objects
AS
tb
WITH
(
NOLOCK
)
ON
sc
.
SCHEMA_ID
=
tb
.
SCHEMA_ID
INNER
JOIN
@ObjectTypes
ot
ON
ot
.
TYPE
=
tb
.
Type
AND
ot
.
OnlySchemaBound
=
0
LEFT
OUTER
JOIN
sys.tables
tt
WITH
(
NOLOCK
)
ON
tt
.
OBJECT_ID
=
tb
.
OBJECT_ID
WHERE
tb
.
OBJECT_ID
=
OBJECT_ID
(
@ObjectName
)
AND
(
@IgnoreListCount
=
0
OR
(
@IgnoreListCount
>
0
AND
NOT
EXISTS
(
SELECT
*
FROM
#IgnoreList
il
WHERE
il
.
OBJECT_ID
=
TB
.
OBJECT_ID
)
)
)
)
INSERT
#Objects
WITH
(
TABLOCK
)
(
OBJECT_ID
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
tt
.
uses_ansi_nulls
)
SELECT
OBJECT_ID
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
FROM
(
SELECT
OBJECT_ID
,
ROW_NUMBER
(
)
OVER
(
PARTITION
BY
OBJECT_ID
ORDER
BY
(
SELECT
0
)
)
AS
ROW
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
FROM
(
SELECT
OBJECT_ID
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
FROM
s1
UNION
ALL
SELECT
o
.
OBJECT_ID
,
ISNULL
(
@NewSchemaName
,
s
.
name
)
AS
SchemaName
,
ISNULL
(
@AddNamePrefix
,
''
)
+
ISNULL
(
@NewTableName
,
o
.
name
)
AS
ObjectName
,
o
.
type
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
AS
TYPE
,
ot
.
TypeName
,
''
AS
lock_escalation_desc
,
sm
.
uses_ansi_nulls
FROM
sys.sql_expression_dependencies
ed
(
NOLOCK
)
INNER
JOIN
sys.objects
o
(
NOLOCK
)
ON
ed
.
referencing_id
=
o
.
OBJECT_ID
INNER
JOIN
sys.sql_modules
sm
(
NOLOCK
)
ON
sm
.
OBJECT_ID
=
o
.
OBJECT_ID
INNER
JOIN
sys.schemas
s
(
NOLOCK
)
ON
s
.
SCHEMA_ID
=
o
.
SCHEMA_ID
INNER
JOIN
s1
ON
ed
.
referenced_id
=
s1
.
OBJECT_ID
INNER
JOIN
@ObjectTypes
ot
ON
ot
.
TYPE
=
o
.
Type
AND
ot
.
OnlySchemaBound
=
1
WHERE
ed
.
is_schema_bound_reference
=
1
AND
ed
.
referencing_class
=
1
AND
ed
.
referenced_minor_id
=
0
AND
o
.
type
IN
(
'V'
,
'FN'
,
'IF'
,
'TF'
,
'P'
)
AND
@IncludeSchemaBoundObjects
=
1
AND
@CreateTable
=
1
)
k
)
K
WHERE
ROW
=
1
OPTION
(
RECOMPILE
)
END
ELSE
BEGIN
;
WITH
s1
AS
(
SELECT
tb
.
OBJECT_ID
,
ISNULL
(
@NewSchemaName
,
sc
.
name
)
AS
SchemaName
,
ISNULL
(
@AddNamePrefix
,
''
)
+
ISNULL
(
@NewTableName
,
tb
.
name
)
AS
ObjectName
,
tb
.
type
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
AS
TYPE
,
ot
.
TypeName
,
ISNULL
(
tt
.
lock_escalation_desc
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
,
''
)
AS
lock_escalation_desc
,
tt
.
uses_ansi_nulls
FROM
sys.schemas
AS
sc
WITH
(
NOLOCK
)
INNER
JOIN
sys.objects
AS
tb
WITH
(
NOLOCK
)
ON
sc
.
SCHEMA_ID
=
tb
.
SCHEMA_ID
INNER
JOIN
@ObjectTypes
ot
ON
ot
.
TYPE
=
tb
.
Type
AND
ot
.
OnlySchemaBound
=
0
LEFT
OUTER
JOIN
sys.tables
tt
WITH
(
NOLOCK
)
ON
tt
.
OBJECT_ID
=
tb
.
OBJECT_ID
WHERE
(
@SchemaName
IS
NULL
OR
sc
.
name
LIKE
Util
.
dbo
.
TrimBothEnds
(
@SchemaName
)
)
AND
(
@ObjectName
IS
NULL
OR
tb
.
name
LIKE
@ObjectName
)
AND
(
@IncludeMSShipped
=
1
OR
tb
.
is_ms_shipped
=
0
)
AND
NOT
EXISTS
(
SELECT
*
FROM
Util
.
dbo
.
ParseDelimited
(
@ExcludeSchemaList
,
@ExcludeSchemaDelimiter
)
pp
WHERE
pp
.
Field
=
sc
.
name
)
AND
(
@IgnoreListCount
=
0
OR
(
@IgnoreListCount
>
0
AND
NOT
EXISTS
(
SELECT
*
FROM
#IgnoreList
il
WHERE
il
.
OBJECT_ID
=
TB
.
OBJECT_ID
)
)
)
)
INSERT
#Objects
WITH
(
TABLOCK
)
(
OBJECT_ID
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
)
SELECT
OBJECT_ID
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
FROM
(
SELECT
OBJECT_ID
,
ROW_NUMBER
(
)
OVER
(
PARTITION
BY
OBJECT_ID
ORDER
BY
(
SELECT
0
)
)
AS
ROW
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
FROM
(
SELECT
OBJECT_ID
,
SchemaName
,
ObjectName
,
TYPE
,
TypeName
,
lock_escalation_desc
,
uses_ansi_nulls
FROM
s1
UNION
ALL
SELECT
o
.
OBJECT_ID
,
ISNULL
(
@NewSchemaName
,
s
.
name
)
AS
SchemaName
,
ISNULL
(
@AddNamePrefix
,
''
)
+
ISNULL
(
@NewTableName
,
o
.
name
)
AS
ObjectName
,
o
.
type
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
AS
TYPE
,
ot
.
TypeName
,
''
AS
lock_escalation_desc
,
sm
.
uses_ansi_nulls
FROM
sys.sql_expression_dependencies
ed
(
NOLOCK
)
INNER
JOIN
sys.objects
o
(
NOLOCK
)
ON
ed
.
referencing_id
=
o
.
OBJECT_ID
INNER
JOIN
sys.sql_modules
sm
(
NOLOCK
)
ON
sm
.
OBJECT_ID
=
o
.
OBJECT_ID
INNER
JOIN
sys.schemas
s
(
NOLOCK
)
ON
s
.
SCHEMA_ID
=
o
.
SCHEMA_ID
INNER
JOIN
s1
ON
ed
.
referenced_id
=
s1
.
OBJECT_ID
INNER
JOIN
@ObjectTypes
ot
ON
ot
.
TYPE
=
o
.
Type
AND
ot
.
OnlySchemaBound
=
1
WHERE
ed
.
is_schema_bound_reference
=
1
AND
ed
.
referencing_class
=
1
AND
ed
.
referenced_minor_id
=
0
AND
o
.
type
IN
(
'V'
,
'FN'
,
'IF'
,
'TF'
,
'P'
)
AND
@IncludeSchemaBoundObjects
=
1
AND
@CreateTable
=
1
)
k
)
k
WHERE
ROW
=
1
OPTION
(
RECOMPILE
)
END
IF
@IncludeSchemaBoundObjects
=
1
AND
@CreateTable
=
1
SELECT
@CreateTrigger
=
ISNULL
(
Trg
,
@CreateTrigger
)
,
@CreateFunction
=
ISNULL
(
Fnc
,
@CreateFunction
)
,
@CreateProcedure
=
ISNULL
(
prc
,
@CreateProcedure
)
,
@CreateView
=
ISNULL
(
vw
,
@CreateView
)
FROM
(
SELECT
MAX
(
CASE
WHEN
TypeName
=
'TRIGGER'
THEN
1
END
)
AS
Trg
,
MAX
(
CASE
WHEN
TypeName
=
'FUNCTION'
THEN
1
END
)
AS
Fnc
,
MAX
(
CASE
WHEN
TypeName
=
'PROCEDURE'
THEN
1
END
)
AS
Prc
,
MAX
(
CASE
WHEN
TypeName
=
'VIEW'
THEN
1
END
)
vw
FROM
#Objects
)
k
;
WITH
TableInfo
AS
(
SELECT
tl
.
OBJECT_ID
,
SchemaName
,
ObjectName
,
tl
.
lock_escalation_desc
,
CASE
WHEN
@NewPartition
<
>
''
THEN
'ON '
+
@NewPartition
WHEN
@NewFileGroup
=
''
THEN
''
ELSE
ISNULL
(
'ON '
+
QUOTENAME
(
@NewFileGroup
)
,
CASE
ds
.
type
WHEN
'FG'
THEN
'ON '
+
QUOTENAME
(
ds
.
NAME
)
WHEN
'PS'
THEN
'ON '
+
QUOTENAME
(
ds
.
NAME
)
+
'('
+
QUOTENAME
(
pc
.
NAME
)
+
')'
WHEN
'FD'
THEN
''
ELSE
''
END
)
END
AS
FileGroup
,
CASE
WHEN
@CreateTableInOneStep
=
1
THEN
''
ELSE
CASE
WHEN
@NewDataCompression
=
''
THEN
''
ELSE
ISNULL
(
'WITH (DATA_COMPRESSION = '
+
@NewDataCompression
+
')'
,
CASE
pr
.
data_compression
WHEN
0
THEN
''
WHEN
1
THEN
' WITH (DATA_COMPRESSION = ROW)'
WHEN
2
THEN
' WITH (DATA_COMPRESSION = PAGE)'
ELSE
''
END
)
END
END
AS
DataCompression
FROM
#Objects
AS
tl
INNER
JOIN
sys.indexes
AS
ix
WITH
(
NOLOCK
)
ON
tl
.
OBJECT_ID
=
ix
.
OBJECT_ID
AND
ix
.
index_id
<
=
1
INNER
JOIN
sys.data_spaces
AS
ds
WITH
(
NOLOCK
)
ON
ds
.
data_space_id
=
ix
.
data_space_id
LEFT
OUTER
JOIN
sys.partitions
AS
pr
WITH
(
NOLOCK
)
ON
pr
.
OBJECT_ID
=
ix
.
OBJECT_ID
AND
pr
.
index_id
=
ix
.
index_id
AND
pr
.
partition_number
=
1
LEFT
OUTER
JOIN
sys.index_columns
AS
ic
WITH
(
NOLOCK
)
ON
ic
.
OBJECT_ID
=
ix
.
OBJECT_ID
AND
ic
.
index_id
=
ix
.
index_id
AND
ic
.
partition_ordinal
=
1
LEFT
OUTER
JOIN
sys.columns
AS
pc
WITH
(
NOLOCK
)
ON
pc
.
OBJECT_ID
=
ic
.
OBJECT_ID
AND
pc
.
column_id
=
ic
.
column_id
WHERE
tl
.
type
=
'U'
AND
@CreateTable
=
1
)
,
ForeignKeyNames
AS
(
SELECT
tl
.
OBJECT_ID
,
tl
.
SchemaName
,
tl
.
ObjectName
AS
TableName
,
ISNULL
(
@AddNamePrefix
,
''
)
+
fk
.
name
AS
KeyName
FROM
#Objects
AS
tl
INNER
JOIN
sys.foreign_keys
AS
fk
WITH
(
NOLOCK
)
ON
fk
.
parent_object_id
=
tl
.
OBJECT_ID
WHERE
@DropForeignKey
=
1
AND
tl
.
TYPE
=
'U'
AND
(
@IgnoreListCount
=
0
OR
(
@IgnoreListCount
>
0
AND
NOT
EXISTS
(
SELECT
*
FROM
#IgnoreList
il
WHERE
il
.
OBJECT_ID
=
fk
.
OBJECT_ID
)
)
)
AND
(
(
@IgnoreDisabledForeignKey
=
1
AND
fk
.
is_disabled
=
0
)
OR
ISNULL
(
@IgnoreDisabledForeignKey
,
0
)
=
0
)
)
,
Procedures
AS
(
SELECT
tl
.
OBJECT_ID
,
tl
.
SchemaName
,
tl
.
ObjectName
,
tl
.
TypeName
,
tl
.
type
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
AS
TYPE
,
CASE
WHEN
@CreateSETANSI
=
1
THEN
'SET ANSI_NULLS '
+
CASE
WHEN
sm
.
uses_ansi_nulls
=
1
THEN
'ON'
ELSE
'OFF'
END
+
'
GO
SET QUOTED_IDENTIFIER '
+
CASE
WHEN
sm
.
uses_quoted_identifier
=
1
THEN
'ON'
ELSE
'OFF'
END
+
'
GO
'
ELSE
''
END
+
CASE
WHEN
@AlterProcedures
=
1
THEN
Util
.
dbo
.
GenerateAlterScript
(
sm
.
definition
)
ELSE
Util
.
dbo
.
TrimMultiLine
(
sm
.
definition
)
END
AS
ObjectDefinition
FROM
#Objects
tl
INNER
JOIN
sys.sql_modules
AS
sm
(
NOLOCK
)
ON
sm
.
OBJECT_ID
=
tl
.
OBJECT_ID
WHERE
(
@DropFunction
=
1
OR
@CreateFunction
=
1
OR
@DropView
=
1
OR
@CreateView
=
1
OR
@DropProcedure
=
1
OR
@CreateProcedure
=
1
)
AND
tl
.
TYPE
IN
(
'FN'
,
'IF'
,
'TF'
,
'P'
,
'V'
)
)
,
Triggers
AS
(
SELECT
tl
.
OBJECT_ID
,
s
.
name
AS
SchemaName
,
tl
.
ObjectName
,
tr
.
NAME
AS
TriggerName
,
CASE
WHEN
@CreateSETANSI
=
1
THEN
'SET ANSI_NULLS '
+
CASE
WHEN
sm
.
uses_ansi_nulls
=
1
THEN
'ON'
ELSE
'OFF'
END
+
'
GO
SET QUOTED_IDENTIFIER '
+
CASE
WHEN
sm
.
uses_quoted_identifier
=
1
THEN
'ON'
ELSE
'OFF'
END
+
'
GO
'
ELSE
''
END
+
CASE
WHEN
@AlterProcedures
=
1
THEN
Util
.
dbo
.
GenerateAlterScript
(
sm
.
definition
)
ELSE
Util
.
dbo
.
TrimMultiLine
(
sm
.
definition
)
END
AS
TriggerDefinition
FROM
#Objects
tl
INNER
JOIN
sys.triggers
tr
(
NOLOCK
)
ON
tr
.
parent_id
=
tl
.
OBJECT_ID
INNER
JOIN
sys.objects
o
(
NOLOCK
)
ON
o
.
OBJECT_ID
=
tr
.
OBJECT_ID
INNER
JOIN
sys.schemas
s
(
NOLOCK
)
ON
s
.
SCHEMA_ID
=
o
.
SCHEMA_ID
INNER
JOIN
sys.sql_modules
AS
sm
(
NOLOCK
)
ON
sm
.
OBJECT_ID
=
tr
.
OBJECT_ID
WHERE
(
@DropTrigger
=
1
OR
@CreateTrigger
=
1
)
AND
(
@IgnoreListCount
=
0
OR
(
@IgnoreListCount
>
0
AND
NOT
EXISTS
(
SELECT
*
FROM
#IgnoreList
il
WHERE
il
.
OBJECT_ID
=
tr
.
OBJECT_ID
)
)
)
)
,
DefaultConstraintNames
AS
(
SELECT
tl
.
OBJECT_ID
,
tl
.
SchemaName
,
tl
.
ObjectName
AS
TableName
,
ISNULL
(
@AddNamePrefix
,
''
)
+
dc
.
name
AS
ConstraintName
,
c
.
name
AS
ColumnName
,
definition
FROM
sys.default_constraints
AS
dc
WITH
(
NOLOCK
)
INNER
JOIN
#Objects
AS
tl
ON
tl
.
OBJECT_ID
=
dc
.
parent_object_id
INNER
JOIN
sys.columns
AS
c
WITH
(
NOLOCK
)
ON
c
.
OBJECT_ID
=
dc
.
parent_object_id
AND
dc
.
parent_column_id
=
c
.
column_id
WHERE
(
@DropDefaultConstraints
=
1
OR
(
ISNULL
(
@CreateTable
,
0
)
=
0
AND
@CreateDefaultConstraints
=
1
)
)
AND
(
@IgnoreListCount
=
0
OR
(
@IgnoreListCount
>
0
AND
NOT
EXISTS
(
SELECT
*
FROM
#IgnoreList
il
WHERE
il
.
OBJECT_ID
=
dc
.
OBJECT_ID
)
)
)
)
,
ForeignKeyColumns
AS
(
SELECT
tl
.
OBJECT_ID
,
tl
.
SchemaName
,
tl
.
ObjectName
AS
TableName
,
ISNULL
(
@AddNamePrefix
,
''
)
+
fk
.
name
AS
KeyName
,
ParentColumns
,
CASE
WHEN
rs
.
name
=
@ReplaceReferenceSchemaFrom
AND
@ReplaceReferenceSchemaTo
<
>
''
THEN
@ReplaceReferenceSchemaTo
ELSE
rs
.
name
END
AS
rSchemaName
,
rt
.
name
AS
rTableName
,
ReferencedColumns
,
fk
.
delete_referential_action
,
fk
.
delete_referential_action_desc
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
AS
delete_referential_action_desc
,
fk
.
update_referential_action
,
fk
.
update_referential_action_desc
COLLATE
SQL_LATIN1_GENERAL_CP1_CI_AS
AS
update_referential_action_desc
,
fk
.
is_not_for_replication
,
fk
.
is_disabled
FROM
#Objects
AS
tl
INNER
JOIN
sys.foreign_keys
AS
fk
WITH
(
NOLOCK
)
ON
fk
.
parent_object_id
=
tl
.
OBJECT_ID
INNER
JOIN
sys.tables
AS
rt
WITH
(
NOLOCK
)
ON
rt
.
OBJECT_ID
=
fk
.
referenced_object_id
INNER
JOIN
sys.schemas
AS
rs
WITH
(
NOLOCK
)
ON
rs
.
SCHEMA_ID
=
rt
.
SCHEMA_ID
CROSS
APPLY
(
SELECT
Util
.
dbo
.
StringConcat
(
QUOTENAME
(
ParentColumn
)
,
', '
)
AS
ParentColumns
,
Util
.
dbo
.
StringConcat
(
QUOTENAME
(
ReferencedColumn
)
,
', '
)
AS
ReferencedColumns
FROM
(
SELECT
TOP
999999
pc
.
name
AS
ParentColumn
,
rc
.
name
AS
ReferencedColumn
FROM
sys.foreign_key_columns
fc
(
NOLOCK
)
INNER
JOIN
sys.columns
pc
(
NOLOCK
)
ON
pc
.
OBJECT_ID
=
fk
.
parent_object_id
AND
fc
.
parent_column_id
=
pc
.
column_id
INNER
JOIN
sys.columns
rc
(
NOLOCK
)
ON
rc
.
OBJECT_ID
=
fk
.
referenced_object_id
AND
fc
.
referenced_column_id
=
rc
.
column_id
WHERE
fc
.
constraint_object_id
=
fk
.
OBJECT_ID
ORDER
BY
fc
.
constraint_column_id
)
k
)
fc
WHERE
tl
.
Type
=
'U'
AND
(
@IgnoreListCount
=
0
OR
(
@IgnoreListCount
>
0
AND
NOT
EXISTS
(
SELECT
*
FROM
#IgnoreList
il
WHERE
il
.
OBJECT_ID
=
fk
.
OBJECT_ID
)
)
)
AND
@CreateForeignKey
=
1
AND
(
(
@IgnoreDisabledForeignKey
=
1
AND
fk
.
is_disabled
=
0
)
OR
ISNULL
(
@IgnoreDisabledForeignKey
,
0
)
=
0
)
)
,
IndexNames
AS
(
SELECT
tl
.
OBJECT_ID
,
tl
.
SchemaName
,
tl
.
ObjectName
,
CASE
WHEN
ix
.
is_primary_key
=
1
OR
ix
.
is_unique_constraint
=
1
THEN
ISNULL
(
@AddNamePrefix
,
''
)
+
ix
.
name
ELSE
ix
.
name
END
AS
IndexName
,
ix
.
is_primary_key
,
ix
.
is_unique_constraint
,
ix
.
index_id
,
DropIndex
FROM
#Objects
AS
tl
INNER
JOIN
sys.indexes
AS
ix
WITH
(
NOLOCK
)
ON
tl
.
OBJECT_ID
=
ix
.
OBJECT_ID
CROSS
APPLY
(
SELECT
CASE
WHEN
(
ISNULL
(
@DropPrimaryKey
,
0
)
=
1
AND
ix
.
is_primary_key
=
1
)
OR
(
ISNULL
(
@DropClusteredIndex
,
0
)
=
1
AND
ix
.
index_id
=
1
)
OR
(
ISNULL
(
@DropNonClusteredIndex
,
0
)
=
1
AND
ix
.
index_id
>
1
)
OR
(
ISNULL
(
@DropUniqueKey
,
0
)
=
1
AND
ix
.
is_unique_constraint
=
1
)
OR
(
ISNULL
(
@DropIndex
,
0
)
=
1
AND
ix
.
is_unique_constraint
=
0
AND
ix
.
is_primary_key
=
0
)
THEN
1
ELSE
0
END
AS
DropIndex
)
di
WHERE
tl
.
Type
IN
(
'U'
,
'V'
)
AND
ix
.
index_id
>
0
AND
DropIndex
=
1
)
,
IndexColumns
AS
(
SELECT
tl
.
OBJECT_ID
,
tl
.
SchemaName
,
tl
.
ObjectName
,
CASE
WHEN
ix
.
is_primary_key
=
1
OR
ix
.
is_unique_constraint
=
1
THEN
ISNULL
(
@AddNamePrefix
,
''
)
+
ix
.
name
ELSE
ix
.
name
END
AS
IndexName
,
ix
.
type_desc
COLLATE
SQL_Latin1_General_CP1_CI_AS
AS
IndexType
,
ds
.
type
AS
DataspaceType
,
ds
.
name
AS
DataspaceName
,
ix
.
index_id
,
ix
.
is_unique
,
ix
.
is_primary_key
,
ix
.
is_unique_constraint
,
ix
.
is_disabled
,
ix
.
filter_definition
,
ix
.
has_filter
,
tl
.
uses_ansi_nulls
,
dc
.
DataCompression
,
ISNULL
(
' WITH ('
+
NULLIF
(
LTRIM
(
RTRIM
(
SUBSTRING
(
ISNULL
(
', '
+
dc
.
DataCompression
,
''
)
+
ISNULL
(
CASE
WHEN
@SortInTempDb
=
1
AND
DisableNonPermanent
=
0
THEN
', SORT_IN_TEMPDB = ON'
END
,
''
)
+
ISNULL
(
CASE
WHEN
ix
.
IGNORE_DUP_KEY
=
1
THEN
', IGNORE_DUP_KEY = ON'
END
,
''
)
+
ISNULL
(
CASE
WHEN
@Online
=
1
AND
DisableNonPermanent
=
0
THEN
', ONLINE = ON'
END
,
''
)
+
ISNULL
(
CASE
WHEN
ISNULL
(
@AllowRowLocks
,
ix
.
ALLOW_ROW_LOCKS
)
=
0
THEN
', ALLOW_ROW_LOCKS = OFF'
END
,
''
)
+
ISNULL
(
CASE
WHEN
ISNULL
(
@AllowPageLocks
,
ix
.
ALLOW_PAGE_LOCKS
)
=
0
THEN
', ALLOW_PAGE_LOCKS = OFF'
END
,
''
)
+
ISNULL
(
CASE
WHEN
@MAXDOP
>
0
AND
DisableNonPermanent
=
0
THEN
', MAXDOP = '
+
CAST
(
@MAXDOP
AS
VARCHAR
)
END
,
''
)
+
ISNULL
(
CASE
WHEN
ISNULL
(
@Fillfactor
,
ix
.
fill_factor
)
>
0
THEN
', FILLFACTOR = '
+
CAST
(
ISNULL
(
@Fillfactor
,
ix
.
fill_factor
)
AS
VARCHAR
)
END
,
''
)
+
ISNULL
(
CASE
WHEN
ISNULL
(
@PadIndex
,
ix
.
is_padded
)
>
0
THEN
', PAD_INDEX = ON'
END
,
''
)
,
3
,
8000
)
)
)
,
''
)
+
')'
,
''
)
AS
IndexOptions
,
ic
.
KeyColumns
,
ic
.
IncludeColumns
,
ic
.
PartitionedColumn
,
CreateIndex
,
CASE
WHEN
IGNORE_DUP_KEY
=
1
THEN
0
ELSE
EnableIndex
END
AS
EnableIndex
,
CASE
WHEN
IGNORE_DUP_KEY
=
1
THEN
0
ELSE
DisableIndex
END
AS
DisableIndex
FROM
#Objects
AS
tl
INNER
JOIN
sys.indexes
AS
ix
WITH
(
NOLOCK
)
ON
tl
.
OBJECT_ID
=
ix
.
OBJECT_ID
AND
ix
.
index_id
>
0
LEFT
OUTER
JOIN
sys.data_spaces
AS
ds
WITH
(
NOLOCK
)
ON
ds
.
data_space_id
=
ix
.
data_space_id
LEFT
OUTER
JOIN
sys.partitions
AS
pr
WITH
(
NOLOCK
)
ON
pr
.
OBJECT_ID
=
ix
.
OBJECT_ID
AND
pr
.
index_id
=
ix
.
index_id
AND
pr
.
partition_number
=
1
CROSS
APPLY
(
SELECT
CASE
WHEN
@CreateTableInOneStep
=
1
AND
(
ix
.
is_primary_key
=
1
OR
ix
.
is_unique_constraint
=
1
)
THEN
1
ELSE
0
END
AS
DisableNonPermanent
)
dp
CROSS
APPLY
(
SELECT
CASE
ISNULL
(
@NewDataCompression
,
pr
.
data_compression_desc
COLLATE
SQL_Latin1_General_CP1_CI_AS
)
WHEN
'ROW'
THEN
'DATA_COMPRESSION = ROW'
WHEN
'PAGE'
THEN
'DATA_COMPRESSION = PAGE'
END
AS
DataCompression
)
AS
dc
CROSS
APPLY
(
SELECT
Util
.
dbo
.
StringConcat
(
CASE
WHEN
key_ordinal
>
0
THEN
QUOTENAME
(
ColumnName
)
+
CASE
WHEN
is_descending_key
=
1
THEN
' DESC'
ELSE
''
END
END
,
', '
)
AS
KeyColumns
,
Util
.
dbo
.
StringConcat
(
CASE
WHEN
is_included_column
=
1
THEN
QUOTENAME
(
ColumnName
)
END
,
', '
)
AS
IncludeColumns
,
MAX
(
CASE
WHEN
partition_ordinal
=
1
THEN
QUOTENAME
(
ColumnName
)
END
)
AS
PartitionedColumn
FROM
(
SELECT
TOP
99999999
cl
.
name
AS
ColumnName
,
ic
.
key_ordinal
,
ic
.
is_included_column
,
ic
.
partition_ordinal
,
ic
.
is_descending_key
FROM
sys.index_columns
AS
ic
WITH
(
NOLOCK
)
INNER
JOIN
sys.columns
AS
cl
WITH
(
NOLOCK
)
ON
cl
.
OBJECT_ID
=
ic
.
OBJECT_ID
AND
cl
.
column_id
=
ic
.
column_id
WHERE
ic
.
OBJECT_ID
=
ix
.
OBJECT_ID
AND
ic
.
index_id
=
ix
.
index_id
ORDER
BY
ic
.
key_ordinal
,
ic
.
index_column_id
)
k
)
ic
CROSS
APPLY
(
SELECT
CASE
WHEN
(
ISNULL
(
@CreatePrimaryKey
,
0
)
=
1
AND
ix
.
is_primary_key
=
1
)
OR
(
ISNULL
(
@CreateClusteredIndex
,
0
)
=
1
AND
ix
.
index_id
=
1
)
OR
(
ISNULL
(
@CreateNonClusteredIndex
,
0
)
=
1
AND
ix
.
index_id
>
1
)
OR
(
ISNULL
(
@CreateUniqueKey
,
0
)
=
1
AND
ix
.
is_unique_constraint
=
1
)
OR
(
ISNULL
(
@CreateIndex
,
0
)
=
1
AND
ix
.
is_unique_constraint
=
0
AND
ix
.
is_primary_key
=
0
)
THEN
1
ELSE
0
END
AS
CreateIndex
,
CASE
WHEN
(
ISNULL
(
@EnableNonClusteredIndex
,
0
)
=
1
AND
ix
.
index_id
>
1
)
OR
(
ISNULL
(
@EnableUniqueKey
,
0
)
=
1
AND
ix
.
is_unique_constraint
=
1
)
OR
(
ISNULL
(
@EnableIndex
,
0
)
=
1
AND
ix
.
is_unique_constraint
=
0
AND
ix
.
is_primary_key
=
0
)
THEN
1
ELSE
0
END
AS
EnableIndex
,
CASE
WHEN
(
ISNULL
(
@DisableNonClusteredIndex
,
0
)
=
1
AND
ix
.
index_id
>
1
)
OR
(
ISNULL
(
@DisableUniqueKey
,
0
)
=
1
AND
ix
.
is_unique_constraint
=
1
)
OR
(
ISNULL
(
@DisableIndex
,
0
)
=
1
AND
ix
.
is_unique_constraint
=
0
AND
ix
.
is_primary_key
=
0
)
THEN
1
ELSE
0
END
AS
DisableIndex
)
CI
WHERE
tl
.
Type
IN
(
'U'
,
'V'
)
AND
(
CreateIndex
=
1
OR
IGNORE_DUP_KEY
=
0
AND
(
EnableIndex
=
1
OR
DisableIndex
=
1
)
)
)
,
CheckConstraints
AS
(
SELECT
tl
.
OBJECT_ID
,
tl
.
SchemaName
,
tl
.
ObjectName
AS
TableName
,
ISNULL
(
@AddNamePrefix
,
''
)
+
ck
.
name
AS
ConstraintName
,
ck
.
definition
,
ck
.
is_disabled
FROM
#Objects
AS
tl
INNER
JOIN
sys.check_constraints
AS
ck
WITH
(
NOLOCK
)
ON
ck
.
parent_object_id
=
tl
.
OBJECT_ID
WHERE
tl
.
Type
=
'U'
AND
(
@IgnoreListCount
=
0
OR
(
@IgnoreListCount
>
0
AND
NOT
EXISTS
(
SELECT
*
FROM
#IgnoreList
il
WHERE
il
.
OBJECT_ID
=
ck
.
OBJECT_ID
)
)
)
AND
(
(
@IgnoreDisabledCheckConstraint
=
1
AND
ck
.
is_disabled
=
0
)
OR
ISNULL
(
@IgnoreDisabledCheckConstraint
,
0
)
=
0
)
)
,
AllScript
AS
(
SELECT
SchemaName
,
TableName
,
KeyName
AS
ObjectName
,
'F'
AS
TYPE
,
CAST
(
0
AS
BIT
)
AS
CreateScript
,
CAST
(
0
AS
INT
)
AS
IndexId
,
NULL
AS
SingleStepScript
,
CASE
WHEN
@UseObjectIdForDrop
=
1
THEN
'IF OBJECT_ID('''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
KeyName
)
+
''') IS NOT NULL'
ELSE
'IF EXISTS (SELECT * FROM sys.foreign_keys (NOLOCK) WHERE object_id = OBJECT_ID(N'''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
KeyName
)
+
''') AND parent_object_id = OBJECT_ID(N'''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
'''))'
END
+
'
ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
' DROP CONSTRAINT '
+
QUOTENAME
(
KeyName
)
+
'
'
AS
Script
FROM
ForeignKeyNames
fk
WHERE
@DropForeignKey
=
1
UNION
ALL
SELECT
SchemaName
,
TableName
,
ConstraintName
AS
ObjectName
,
'D'
AS
TYPE
,
CAST
(
0
AS
BIT
)
AS
CreateScript
,
CAST
(
0
AS
INT
)
AS
IndexId
,
NULL
AS
SingleStepScript
,
CASE
WHEN
@UseObjectIdForDrop
=
1
THEN
'IF OBJECT_ID('''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ConstraintName
)
+
''') IS NOT NULL'
ELSE
'IF EXISTS (SELECT * FROM sys.schemas s (NOLOCK) INNER JOIN sys.objects o (NOLOCK) ON o.schema_id = s.schema_id WHERE s.name = '''
+
SchemaName
+
''' AND o.name = '''
+
ConstraintName
+
''')'
END
+
'
ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
' DROP CONSTRAINT '
+
QUOTENAME
(
ConstraintName
)
+
'
'
AS
Script
FROM
DefaultConstraintNames
dc
WHERE
@DropDefaultConstraints
=
1
UNION
ALL
SELECT
SchemaName
,
Objectname
AS
TableName
,
Objectname
,
'U'
AS
TYPE
,
CAST
(
0
AS
BIT
)
AS
CreateScript
,
CAST
(
0
AS
INT
)
AS
IndexId
,
NULL
AS
SingleStepScript
,
CASE
WHEN
Objectname
LIKE
'#%'
THEN
'IF OBJECT_ID(''tempdb..'
+
Objectname
+
''') IS NOT NULL
DROP '
+
TypeName
+
' '
+
Objectname
+
'
'
ELSE
CASE
WHEN
@UseObjectIdForDrop
=
1
THEN
'IF OBJECT_ID('''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
Objectname
)
+
''') IS NOT NULL'
ELSE
'IF EXISTS (SELECT * FROM sys.schemas s (NOLOCK) INNER JOIN sys.objects o (NOLOCK) ON o.schema_id = s.schema_id WHERE s.name = '''
+
SchemaName
+
''' AND o.name = '''
+
Objectname
+
''')'
END
+
'
DROP '
+
TypeName
+
' '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
Objectname
)
+
'
'
END
AS
Script
FROM
#Objects
WHERE
@DropTable
=
1
UNION
ALL
SELECT
SchemaName
,
Objectname
AS
TableName
,
ObjectName
,
'U'
AS
TYPE
,
CAST
(
1
AS
BIT
)
AS
CreateScript
,
CAST
(
0
AS
INT
)
AS
IndexId
,
AfterScript
AS
SingleStepScript
,
'CREATE TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
CASE
WHEN
ObjectName
LIKE
'#%'
THEN
ObjectName
ELSE
QUOTENAME
(
Objectname
)
END
+
' (
'
+
ColumnDef
AS
Script
FROM
TableInfo
ti
CROSS
APPLY
(
SELECT
')
'
+
CASE
WHEN
@CreateTableInOneStep
=
0
THEN
FileGroup
+
ISNULL
(
DataCompression
,
''
)
ELSE
FileGroup
END
+
CASE
WHEN
lock_escalation_desc
<
>
'TABLE'
THEN
'
ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
Objectname
)
+
' SET (LOCK_ESCALATION = '
+
lock_escalation_desc
+
')
'
ELSE
'
'
END
AS
AfterScript
)
ss
CROSS
APPLY
(
SELECT
Util
.
dbo
.
StringConcat
(
ColumnDef
,
',
'
)
AS
ColumnDef
FROM
(
SELECT
TOP
99999999
QUOTENAME
(
co
.
NAME
)
+
' '
+
CASE
WHEN
cc
.
column_id
IS
NOT
NULL
THEN
'AS '
+
cc
.
definition
+
CASE
WHEN
cc
.
is_persisted
=
1
THEN
' PERSISTED'
+
CASE
WHEN
co
.
is_nullable
=
0
THEN
' NOT NULL'
ELSE
' NULL'
END
ELSE
''
END
ELSE
CASE
WHEN
ts
.
name
IN
(
'char'
,
'varchar'
)
THEN
ts
.
name
+
'('
+
CASE
WHEN
co
.
max_length
=
-
1
THEN
'MAX'
ELSE
CAST
(
co
.
max_length
AS
VARCHAR
)
END
+
')'
+
CASE
WHEN
co
.
collation_name
<
>
db
.
collation_name
THEN
' COLLATE '
+
co
.
collation_name
ELSE
''
END
WHEN
ts
.
name
IN
(
'nchar'
,
'nvarchar'
)
THEN
ts
.
name
+
'('
+
CASE
WHEN
co
.
max_length
=
-
1
THEN
'MAX'
ELSE
CAST
(
co
.
max_length
/
2
AS
VARCHAR
)
END
+
')'
+
CASE
WHEN
co
.
collation_name
<
>
db
.
collation_name
THEN
' COLLATE '
+
co
.
collation_name
ELSE
''
END
WHEN
ts
.
name
IN
(
'binary'
,
'varbinary'
)
THEN
ts
.
name
+
'('
+
CASE
WHEN
co
.
max_length
=
-
1
THEN
'MAX'
ELSE
CAST
(
co
.
max_length
AS
VARCHAR
)
END
+
')'
WHEN
ts
.
name
IN
(
'bigint'
,
'int'
,
'smallint'
,
'tinyint'
)
THEN
ts
.
name
WHEN
ts
.
name
IN
(
'datetime2'
,
'time'
,
'datetimeoffset'
)
THEN
ts
.
name
+
'('
+
CAST
(
co
.
scale
AS
VARCHAR
)
+
')'
WHEN
ts
.
name
IN
(
'numeric'
,
'decimal'
)
THEN
ts
.
name
+
'('
+
CAST
(
co
.
PRECISION
AS
VARCHAR
)
+
', '
+
CAST
(
co
.
scale
AS
VARCHAR
)
+
')'
ELSE
ts
.
name
END
+
CASE
WHEN
co
.
is_identity
=
1
THEN
' IDENTITY'
ELSE
''
END
+
' '
+
CASE
WHEN
co
.
is_nullable
=
1
THEN
'NULL'
ELSE
'NOT NULL'
END
+
CASE
WHEN
@CreateDefaultConstraints
=
1
THEN
CASE
dc
.
is_system_named
WHEN
1
THEN
' DEFAULT '
+
dc
.
definition
WHEN
0
THEN
' CONSTRAINT '
+
QUOTENAME
(
ISNULL
(
@AddNamePrefix
,
''
)
+
dc
.
NAME
)
+
' DEFAULT '
+
dc
.
definition
ELSE
''
END
ELSE
''
END
END
AS
ColumnDef
FROM
sys.columns
AS
co
WITH
(
NOLOCK
)
INNER
JOIN
sys.types
AS
ts
WITH
(
NOLOCK
)
ON
ts
.
user_type_id
=
co
.
user_type_id
INNER
JOIN
sys.databases
AS
db
WITH
(
NOLOCK
)
ON
db
.
database_id
=
DB_ID
(
)
LEFT
OUTER
JOIN
sys.indexes
ix
(
NOLOCK
)
ON
ix
.
OBJECT_ID
=
co
.
OBJECT_ID
AND
ix
.
is_primary_key
=
1
LEFT
OUTER
JOIN
sys.index_columns
ic
(
NOLOCK
)
ON
ic
.
OBJECT_ID
=
ix
.
OBJECT_ID
AND
ic
.
index_id
=
ix
.
index_id
AND
co
.
column_id
=
ic
.
column_id
LEFT
OUTER
JOIN
sys.computed_columns
AS
cc
(
NOLOCK
)
ON
co
.
is_computed
=
1
AND
co
.
OBJECT_ID
=
cc
.
OBJECT_ID
AND
co
.
column_id
=
cc
.
column_id
LEFT
OUTER
JOIN
sys.default_constraints
AS
dc
WITH
(
NOLOCK
)
ON
dc
.
parent_object_id
=
co
.
OBJECT_ID
AND
dc
.
parent_column_id
=
co
.
column_id
AND
(
@IgnoreListCount
=
0
OR
(
@IgnoreListCount
>
0
AND
NOT
EXISTS
(
SELECT
*
FROM
#IgnoreList
il
WHERE
il
.
OBJECT_ID
=
dc
.
OBJECT_ID
)
)
)
WHERE
co
.
OBJECT_ID
=
ti
.
OBJECT_ID
ORDER
BY
CASE
WHEN
@SortTableColumns
=
1
THEN
ISNULL
(
ic
.
key_ordinal
,
255
)
END
,
CASE
WHEN
@SortTableColumns
=
1
THEN
co
.
NAME
END
,
co
.
column_id
)
k
)
tc
UNION
ALL
SELECT
SchemaName
,
TableName
,
ConstraintName
AS
ObjectName
,
'D'
AS
TYPE
,
CAST
(
1
AS
BIT
)
AS
CreateScript
,
CAST
(
0
AS
INT
)
AS
IndexId
,
NULL
AS
SingleStepScript
,
'IF NOT EXISTS(SELECT * FROM sys.schemas s (NOLOCK) INNER JOIN sys.objects o (NOLOCK) ON o.schema_id = s.schema_id WHERE s.name = '''
+
SchemaName
+
''' AND o.name = '''
+
ConstraintName
+
''')
ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
' ADD CONSTRAINT '
+
QUOTENAME
(
ConstraintName
)
+
' DEFAULT '
+
definition
+
' FOR '
+
QUOTENAME
(
ColumnName
)
+
'
'
AS
Script
FROM
DefaultConstraintNames
dc
WHERE
(
@CreateDefaultConstraints
=
1
AND
ISNULL
(
@CreateTable
,
0
)
=
0
)
UNION
ALL
SELECT
SchemaName
,
ObjectName
,
IndexName
AS
ObjectName
,
CASE
WHEN
is_primary_key
=
1
THEN
'PK'
WHEN
is_unique_constraint
=
1
THEN
'UQ'
ELSE
'I'
END
AS
TYPE
,
CAST
(
0
AS
BIT
)
AS
CreateScript
,
index_id
AS
IndexId
,
NULL
AS
SingleStepScript
,
CASE
WHEN
@UseObjectIdForDrop
=
1
THEN
'IF OBJECT_ID('''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
IndexName
)
+
''') IS NOT NULL'
ELSE
'IF EXISTS (SELECT * FROM sys.schemas s (NOLOCK) INNER JOIN sys.objects o (NOLOCK) ON o.schema_id = s.schema_id INNER JOIN sys.indexes i (NOLOCK) ON i.object_id = o.object_id WHERE s.name = '''
+
SchemaName
+
''' AND o.name = '''
+
ObjectName
+
''' AND i.name = '''
+
IndexName
+
''')'
END
+
'
'
+
CASE
WHEN
is_primary_key
=
0
AND
is_unique_constraint
=
0
THEN
'DROP INDEX '
+
QUOTENAME
(
IndexName
)
+
' ON '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ObjectName
)
+
'
'
ELSE
' ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ObjectName
)
+
' DROP CONSTRAINT '
+
QUOTENAME
(
IndexName
)
+
'
'
END
AS
Script
FROM
IndexNames
i
UNION
ALL
SELECT
SchemaName
,
ObjectName
,
IndexName
AS
ObjectName
,
CASE
WHEN
is_primary_key
=
1
THEN
'PK'
WHEN
is_unique_constraint
=
1
THEN
'UQ'
ELSE
'I'
END
AS
TYPE
,
CAST
(
1
AS
BIT
)
AS
CreateScript
,
index_id
AS
IndexId
,
CASE
WHEN
@CreateTableInOneStep
=
1
AND
(
is_primary_key
=
1
OR
is_unique_constraint
=
1
)
THEN
ConstraintScript
END
AS
SingleStepScript
,
CASE
WHEN
CreateIndex
=
1
THEN
CASE
WHEN
@GenerateIfNotExists
=
1
THEN
'IF NOT EXISTS (SELECT * FROM sys.schemas s (NOLOCK) INNER JOIN sys.objects o (NOLOCK) ON o.schema_id = s.schema_id INNER JOIN sys.indexes i (NOLOCK) ON i.object_id = o.object_id WHERE s.name = '''
+
SchemaName
+
''' AND o.name = '''
+
ObjectName
+
''' AND i.name = '''
+
IndexName
+
''')
'
ELSE
''
END
+
CASE
WHEN
has_filter
=
1
THEN
'SET ANSI_NULLS '
+
CASE
WHEN
uses_ansi_nulls
=
1
THEN
'ON'
ELSE
'OFF'
END
+
'
'
ELSE
''
END
+
CASE
WHEN
is_primary_key
=
1
OR
is_unique_constraint
=
1
THEN
'ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ObjectName
)
+
' ADD '
+
ConstraintScript
ELSE
'CREATE '
+
CASE
WHEN
is_unique
=
1
THEN
'UNIQUE '
ELSE
''
END
+
IndexType
+
' INDEX '
+
QUOTENAME
(
IndexName
)
+
' ON '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ObjectName
)
+
' ('
+
KeyColumns
+
')'
+
ISNULL
(
' INCLUDE ('
+
IncludeColumns
+
')'
,
''
)
+
ISNULL
(
' WHERE '
+
filter_definition
,
''
)
+
IndexOptions
+
' '
+
CASE
WHEN
@NewPartition
<
>
''
THEN
'ON '
+
@NewPartition
WHEN
@NewFileGroup
=
''
THEN
''
ELSE
ISNULL
(
'ON '
+
QUOTENAME
(
@NewFileGroup
)
+
''
,
CASE
DataspaceType
WHEN
'FG'
THEN
'ON '
+
QUOTENAME
(
DataspaceName
)
+
''
WHEN
'PS'
THEN
'ON '
+
QUOTENAME
(
DataspaceName
)
+
'('
+
PartitionedColumn
+
')'
WHEN
'FD'
THEN
''
ELSE
''
END
)
END
END
+
'
'
ELSE
''
END
+
CASE
WHEN
CreateIndex
=
0
AND
EnableIndex
=
1
THEN
'ALTER INDEX '
+
QUOTENAME
(
IndexName
)
+
' ON '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ObjectName
)
+
' REBUILD '
+
IndexOptions
+
'
'
ELSE
''
END
+
CASE
WHEN
DisableIndex
=
1
OR
(
CreateIndex
=
1
AND
EnableIndex
=
0
AND
is_disabled
=
1
)
THEN
'ALTER INDEX '
+
QUOTENAME
(
IndexName
)
+
' ON '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ObjectName
)
+
' DISABLE
'
ELSE
''
END
AS
Script
FROM
IndexColumns
ic
CROSS
APPLY
(
SELECT
'CONSTRAINT '
+
QUOTENAME
(
IndexName
)
+
' '
+
CASE
WHEN
is_primary_key
=
1
THEN
'PRIMARY KEY '
ELSE
'UNIQUE '
END
+
IndexType
+
' ('
+
KeyColumns
+
')'
+
IndexOptions
+
' '
+
CASE
WHEN
@NewPartition
<
>
''
THEN
'ON '
+
@NewPartition
WHEN
@NewFileGroup
=
''
THEN
''
ELSE
ISNULL
(
'ON '
+
QUOTENAME
(
@NewFileGroup
)
,
CASE
DataspaceType
WHEN
'FG'
THEN
'ON '
+
QUOTENAME
(
DataspaceName
)
WHEN
'PS'
THEN
'ON '
+
QUOTENAME
(
DataspaceName
)
+
'('
+
PartitionedColumn
+
')'
WHEN
'FD'
THEN
''
ELSE
''
END
)
END
AS
ConstraintScript
)
cs
UNION
ALL
SELECT
SchemaName
AS
SchemaName
,
TableName
AS
TableName
,
KeyName
AS
ObjectName
,
'F'
AS
TYPE
,
CAST
(
1
AS
BIT
)
AS
CreateScript
,
CAST
(
0
AS
INT
)
AS
IndexId
,
f2
.
Script
AS
SingleStepScript
,
CASE
WHEN
@GenerateIfNotExists
=
1
THEN
'IF NOT EXISTS (SELECT * FROM sys.foreign_keys (NOLOCK) WHERE object_id = OBJECT_ID(N'''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
KeyName
)
+
''') AND parent_object_id = OBJECT_ID(N'''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
'''))
'
ELSE
''
END
+
'ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
' '
+
CASE
WHEN
is_disabled
=
1
OR
@CreateForeignKeyInTwoSteps
=
1
THEN
'WITH NOCHECK '
ELSE
''
END
+
'ADD '
+
f2
.
Script
+
'
'
+
CASE
WHEN
is_disabled
=
1
THEN
'ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
' NOCHECK CONSTRAINT '
+
QUOTENAME
(
KeyName
)
+
'
'
ELSE
''
END
+
CASE
WHEN
is_disabled
=
0
AND
@CreateForeignKeyInTwoSteps
=
1
THEN
'ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
' WITH CHECK CHECK CONSTRAINT '
+
QUOTENAME
(
KeyName
)
+
'
'
ELSE
''
END
AS
Script
FROM
ForeignKeyColumns
fk
CROSS
APPLY
(
SELECT
'CONSTRAINT '
+
QUOTENAME
(
KeyName
)
+
' FOREIGN KEY ('
+
ParentColumns
+
') REFERENCES '
+
QUOTENAME
(
rSchemaName
)
+
'.'
+
QUOTENAME
(
rTableName
)
+
' ('
+
ReferencedColumns
+
')'
+
CASE
WHEN
delete_referential_action
>
0
THEN
' ON DELETE '
+
delete_referential_action_desc
ELSE
''
END
+
CASE
WHEN
update_referential_action
>
0
THEN
' ON UPDATE '
+
update_referential_action_desc
ELSE
''
END
+
CASE
WHEN
is_not_for_replication
=
1
THEN
' NOT FOR REPLICATION'
ELSE
''
END
AS
Script
)
f2
UNION
ALL
SELECT
SchemaName
,
TableName
,
ConstraintName
AS
ObjectName
,
'C'
AS
TYPE
,
CAST
(
0
AS
BIT
)
AS
CreateScript
,
CAST
(
0
AS
INT
)
AS
IndexId
,
NULL
AS
SingleStepScript
,
CASE
WHEN
@UseObjectIdForDrop
=
1
THEN
'IF OBJECT_ID('''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ConstraintName
)
+
''') IS NOT NULL'
ELSE
'IF EXISTS (SELECT * FROM sys.check_constraints (NOLOCK) WHERE object_id = OBJECT_ID(N'''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ConstraintName
)
+
''') AND parent_object_id = OBJECT_ID(N'''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
'''))'
END
+
'
ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
' DROP CONSTRAINT '
+
QUOTENAME
(
ConstraintName
)
+
'
'
AS
Script
FROM
CheckConstraints
ck
WHERE
@DropCheckConstraint
=
1
UNION
ALL
SELECT
SchemaName
,
TableName
,
ConstraintName
AS
ObjectName
,
'C'
AS
TYPE
,
CreateScript
,
CAST
(
0
AS
INT
)
AS
IndexId
,
cs
.
Script
AS
SingleStepScript
,
kk
.
Script
FROM
CheckConstraints
ck
CROSS
APPLY
(
SELECT
'CONSTRAINT '
+
QUOTENAME
(
ConstraintName
)
+
' CHECK '
+
definition
AS
Script
)
cs
CROSS
APPLY
(
SELECT
CAST
(
1
AS
BIT
)
AS
CreateScript
,
CASE
WHEN
@GenerateIfNotExists
=
1
THEN
'IF NOT EXISTS (SELECT * FROM sys.check_constraints (NOLOCK) WHERE object_id = OBJECT_ID(N'''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ConstraintName
)
+
''') AND parent_object_id = OBJECT_ID(N'''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
'''))
'
ELSE
''
END
+
'ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
' '
+
CASE
WHEN
is_disabled
=
1
OR
@CreateCheckConstraintInTwoSteps
=
1
THEN
'WITH NOCHECK '
ELSE
''
END
+
'ADD '
+
Script
+
'
'
+
CASE
WHEN
is_disabled
=
1
THEN
'ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
' NOCHECK CONSTRAINT '
+
QUOTENAME
(
ConstraintName
)
+
'
'
ELSE
''
END
+
CASE
WHEN
is_disabled
=
0
AND
@CreateCheckConstraintInTwoSteps
=
1
THEN
'ALTER TABLE '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TableName
)
+
' WITH CHECK CHECK CONSTRAINT '
+
QUOTENAME
(
ConstraintName
)
+
'
'
ELSE
''
END
AS
Script
)
kk
WHERE
@CreateCheckConstraint
=
1
UNION
ALL
SELECT
SchemaName
,
ObjectName
,
ObjectName
,
TYPE
,
CreateScript
,
CAST
(
0
AS
INT
)
AS
IndexId
,
NULL
AS
SingleStepScript
,
Script
FROM
Procedures
tr
CROSS
APPLY
(
SELECT
CAST
(
0
AS
BIT
)
AS
CreateScript
,
CASE
WHEN
@UseObjectIdForDrop
=
1
THEN
'IF OBJECT_ID('''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
Objectname
)
+
''') IS NOT NULL'
ELSE
'IF EXISTS (SELECT * FROM sys.objects (NOLOCK) WHERE object_id = OBJECT_ID(N'''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
ObjectName
)
+
'''))'
END
+
'
DROP '
+
TypeName
+
' '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
Objectname
)
+
'
'
AS
Script
WHERE
(
(
@DropProcedure
=
1
AND
TYPE
=
'P'
)
OR
(
@DropFunction
=
1
AND
TYPE
IN
(
'FN'
,
'IF'
,
'TF'
)
)
OR
(
@DropView
=
1
AND
TYPE
=
'V'
)
)
UNION
ALL
SELECT
CAST
(
1
AS
BIT
)
AS
CreateScript
,
ObjectDefinition
+
'
'
AS
Script
WHERE
(
(
@CreateProcedure
=
1
AND
TYPE
=
'P'
)
OR
(
@CreateFunction
=
1
AND
TYPE
IN
(
'FN'
,
'IF'
,
'TF'
)
)
OR
(
@CreateView
=
1
AND
TYPE
=
'V'
)
)
)
ss
UNION
ALL
SELECT
SchemaName
,
ObjectName
,
TriggerName
AS
ObjectName
,
'TR'
AS
TYPE
,
CreateScript
,
CAST
(
0
AS
INT
)
AS
IndexId
,
NULL
AS
SingleStepScript
,
SCRIPT
FROM
Triggers
tr
CROSS
APPLY
(
SELECT
CAST
(
0
AS
BIT
)
AS
CreateScript
,
CASE
WHEN
@UseObjectIdForDrop
=
1
THEN
'IF OBJECT_ID('''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TriggerName
)
+
''') IS NOT NULL'
ELSE
'IF EXISTS (SELECT * FROM sys.triggers (NOLOCK) WHERE object_id = OBJECT_ID(N'''
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TriggerName
)
+
'''))'
END
+
'
DROP TRIGGER '
+
QUOTENAME
(
SchemaName
)
+
'.'
+
QUOTENAME
(
TriggerName
)
+
'
'
AS
SCRIPT
WHERE
@DropTrigger
=
1
UNION
ALL
SELECT
CAST
(
1
AS
BIT
)
AS
CreateScript
,
TriggerDefinition
+
'
'
AS
SCRIPT
WHERE
@CreateTrigger
=
1
)
kk
)
INSERT
#sp_script
WITH
(
TABLOCK
)
(
OrderId
,
SchemaName
,
TableName
,
ObjectName
,
TYPE
,
CreateScript
,
IndexId
,
Script
)
SELECT
TOP
999999999
ISNULL
(
(
SELECT
MAX
(
OrderId
)
FROM
#sp_script
)
,
0
)
+
ROW_NUMBER
(
)
OVER
(
ORDER
BY
CASE
WHEN
a
.
CreateScript
=
0
THEN
-
1
*
ISNULL
(
s
.
OrderID
,
100
)
ELSE
ISNULL
(
s
.
OrderID
,
100
)
END
,
a
.
CreateScript
,
a
.
SchemaName
,
a
.
TableName
,
CASE
WHEN
CreateScript
=
1
THEN
a
.
IndexId
ELSE
(
-
1
*
a
.
IndexId
)
END
,
a
.
ObjectName
,
a
.
Type
)
AS
OrderID
,
a
.
SchemaName
,
a
.
TableName
,
a
.
ObjectName
,
a
.
Type
,
a
.
CreateScript
,
a
.
IndexId
,
CASE
WHEN
@CreateTableInOneStep
=
1
AND
a
.
Type
=
'U'
AND
a
.
CreateScript
=
1
THEN
a
.
Script
+
ISNULL
(
',
'
+
b
.
TableAddScript
,
''
)
+
a
.
SingleStepScript
WHEN
a
.
Type
=
'U'
AND
a
.
CreateScript
=
1
THEN
a
.
Script
+
a
.
SingleStepScript
ELSE
a
.
Script
END
FROM
AllScript
a
OUTER
APPLY
(
SELECT
Util
.
dbo
.
StringConcat
(
' '
+
b
.
SingleStepScript
,
',
'
)
AS
TableAddScript
FROM
AllScript
b
WHERE
@CreateTableInOneStep
=
1
AND
b
.
CreateScript
=
1
AND
a
.
CreateScript
=
1
AND
b
.
TYPE
<
>
'U'
AND
A
.
TYPE
=
'U'
AND
a
.
SchemaName
=
b
.
SchemaName
AND
a
.
TableName
=
b
.
TableName
)
b
LEFT
OUTER
JOIN
(
SELECT
TYPE
,
Description
,
OrderId
FROM
(
VALUES
(
'U'
,
'Table (user-defined)'
,
1
)
,
(
'V'
,
'View'
,
2
)
,
(
'PK'
,
'PRIMARY KEY constraint'
,
3
)
,
(
'UQ'
,
'UNIQUE constraint'
,
4
)
,
(
'I'
,
'Index (Gokhan Custom)'
,
5
)
,
(
'C'
,
'CHECK constraint'
,
6
)
,
(
'D'
,
'DEFAULT (constraint or stand-alone)'
,
7
)
,
(
'F'
,
'FOREIGN KEY constraint'
,
8
)
,
(
'TR'
,
'SQL DML trigger'
,
9
)
,
(
'FN'
,
'SQL scalar function'
,
20
)
,
(
'IF'
,
'SQL inline table-valued function'
,
30
)
,
(
'P'
,
'SQL Stored Procedure'
,
40
)
,
(
'TF'
,
'SQL table-valued-function'
,
50
)
)
AS
temp
(
TYPE
,
Description
,
OrderId
)
)
s
ON
a
.
TYPE
=
s
.
TYPE
WHERE
NOT
(
@CreateTableInOneStep
=
1
AND
a
.
TYPE
<
>
'U'
AND
a
.
SingleStepScript
IS
NOT
NULL
)
OPTION
(
MAXDOP
1
,
RECOMPILE
)
IF
@SilentOperation
=
1
RETURN
IF
@ReturnRecordset
=
1
BEGIN
SELECT
SchemaName
,
TableName
,
ObjectName
,
TYPE
,
CreateScript
,
Script
FROM
#sp_script
RETURN
END
SELECT
@SQL
=
ISNULL
(
@SQL
,
''
)
+
ISNULL
(
'USE '
+
QUOTENAME
(
@NewDatabaseName
)
+
'
'
,
''
)
+
Util
.
dbo
.
StringConcat
(
Script
,
@BatchTerminator
)
FROM
(
SELECT
TOP
99999999
Script
FROM
#sp_script
ORDER
BY
OrderId
)
kk
OPTION
(
MAXDOP
1
)
IF
OBJECT_ID
(
'tempdb..#sp_script'
)
IS
NOT
NULL
DROP
TABLE
#sp_script
IF
@SQL
<
>
''
AND
@BatchTerminator
<
>
''
SET
@SQL
=
@SQL
+
@BatchTerminator
IF
@FilePath
<
>
''
SELECT
ReturnVal
,
MESSAGE
,
@FilePath
AS
FilePath
,
'Saved to '
+
@FilePath
AS
Info
FROM
Util
.
FS
.
AppendAllTextToFile
(
@FilePath
,
@SQL
,
1
)
IF
@recipients
<
>
''
BEGIN
SET
@subject
=
ISNULL
(
@subject
,
'sp_script'
)
EXEC
msdb
.
dbo
.
sp_send_dbmail
@recipients
=
@recipients
,
@subject
=
@subject
,
@body
=
@SQL
END
IF
@PrintSQL
=
1
EXEC
Util
.
dbo
.
PrintLargeText
@Input
=
@SQL
,
@RtrimLines
=
@RtrimLines
IF
@ExecuteSQL
=
1
AND
@SQL
<
>
''
BEGIN
IF
@UseTransaction
=
1
BEGIN
TRANSACTION
EXEC
(
@SQL
)
IF
@@ERROR
=
0
BEGIN
IF
@UseTransaction
=
1
AND
@@TRANCOUNT
>
0
COMMIT
TRANSACTION
RETURN
0
END
ELSE
BEGIN
IF
@UseTransaction
=
1
AND
@@TRANCOUNT
>
0
ROLLBACK
TRANSACTION
RETURN
12
END
END
RETURN
0
GO
EXEC
sys.sp_ms_marksystemobject
sp_script
GO
Description for Template Script: System Proc\sp_script.sql
Todo
Home
Site Map
Search
Register
Sign In