diff --git a/issues/3.yaml b/issues/3.yaml new file mode 100644 index 0000000..dcc9bbd --- /dev/null +++ b/issues/3.yaml @@ -0,0 +1,75 @@ +id: 3 +title: Add support for Indexes exportation +state: open +tags: enhancement + +```sql +DECLARE cIX CURSOR FOR + SELECT OBJECT_NAME(SI.Object_ID), SI.Object_ID, OBJECT_SCHEMA_NAME(SI.Object_ID) ,SI.Name, SI.Index_ID + FROM Sys.Indexes SI + LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC ON SI.Name = TC.CONSTRAINT_NAME AND OBJECT_NAME(SI.Object_ID) = TC.TABLE_NAME + WHERE TC.CONSTRAINT_NAME IS NULL + AND OBJECTPROPERTY(SI.Object_ID, 'IsUserTable') = 1 + ORDER BY OBJECT_NAME(SI.Object_ID), SI.Index_ID + +DECLARE @IxSchema SYSNAME +DECLARE @IxTable SYSNAME +DECLARE @IxTableID INT +DECLARE @IxName SYSNAME +DECLARE @IxID INT + +-- Loop through all indexes +OPEN cIX +FETCH NEXT FROM cIX INTO @IxTable, @IxTableID, @IxSchema, @IxName, @IxID +WHILE (@@FETCH_STATUS = 0) +BEGIN + DECLARE @IXSQL NVARCHAR(4000) SET @IXSQL = '' + SET @IXSQL = 'CREATE ' + + -- Check if the index is unique + IF (INDEXPROPERTY(@IxTableID, @IxName, 'IsUnique') = 1) + SET @IXSQL = @IXSQL + 'UNIQUE ' + -- Check if the index is clustered + IF (INDEXPROPERTY(@IxTableID, @IxName, 'IsClustered') = 1) + SET @IXSQL = @IXSQL + 'CLUSTERED ' + + SET @IXSQL = @IXSQL + 'INDEX ' + @IxName + ' ON ' + @IxSchema+'.'+@IxTable + '(' + + -- Get all columns of the index + DECLARE cIxColumn CURSOR FOR + SELECT SC.Name + FROM Sys.Index_Columns IC + JOIN Sys.Columns SC ON IC.Object_ID = SC.Object_ID AND IC.Column_ID = SC.Column_ID + WHERE IC.Object_ID = @IxTableID AND Index_ID = @IxID + ORDER BY IC.Index_Column_ID + + DECLARE @IxColumn SYSNAME + DECLARE @IxFirstColumn BIT SET @IxFirstColumn = 1 + + -- Loop throug all columns of the index and append them to the CREATE statement + OPEN cIxColumn + FETCH NEXT FROM cIxColumn INTO @IxColumn + WHILE (@@FETCH_STATUS = 0) + BEGIN + IF (@IxFirstColumn = 1) + SET @IxFirstColumn = 0 + ELSE + SET @IXSQL = @IXSQL + ', ' + + SET @IXSQL = @IXSQL + @IxColumn + + FETCH NEXT FROM cIxColumn INTO @IxColumn + END + CLOSE cIxColumn + DEALLOCATE cIxColumn + + SET @IXSQL = @IXSQL + ')' + -- Print out the CREATE statement for the index + IF @IXSQL != '' BEGIN PRINT @IXSQL END + + FETCH NEXT FROM cIX INTO @IxTable, @IxTableID, @IxSchema, @IxName, @IxID +END + +CLOSE cIX +DEALLOCATE cIX +```