• The "include" index param is missing. I've refactored the script as follows:

    -- Get all existing indexes, but NOT the primary keys

    DECLARE cIX CURSOR FOR

    SELECT OBJECT_NAME(SI.Object_ID),

    SI.Object_ID,

    SI.Name,

    SI.Index_ID,

    (select TABLE_SCHEMA from INFORMATION_SCHEMA.TABLES where TABLE_NAME = OBJECT_NAME(SI.Object_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

    AND OBJECT_NAME(SI.Object_ID) = @tablename

    ORDER BY OBJECT_NAME(SI.Object_ID), SI.Index_ID

    DECLARE @IxTable sysname

    DECLARE @IxTableID INT

    DECLARE @IxName sysname

    DECLARE @i_schema sysname

    DECLARE @IxID INT

    -- Loop through all indexes

    OPEN cIX

    FETCH NEXT FROM cIX INTO @IxTable, @IxTableID, @IxName, @IxID, @i_schema

    WHILE (@@FETCH_STATUS = 0)

    BEGIN

    DECLARE @IXSQL NVARCHAR(4000) //SET @PKSQL = ''

    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 [' + @i_schema +'.'+ @IxTable + ']('

    -- Get all columns of the index

    DECLARE cIxColumn CURSOR FOR

    SELECT SC.Name, IC.is_included_column, IC.is_descending_key

    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

    declare @i_include bit

    declare @i_desc bit

    declare @i_sql_col varchar(4000) set @i_sql_col = ''

    declare @i_sql_inc varchar(4000) set @i_sql_inc = ''

    -- Loop throug all columns of the index and append them to the CREATE statement

    OPEN cIxColumn

    FETCH NEXT FROM cIxColumn INTO @IxColumn,@i_include,@i_desc

    WHILE (@@FETCH_STATUS = 0)

    BEGIN

    if (@i_include = 1)

    set @i_sql_inc = @i_sql_inc +', ' + '[' + @IxColumn + ']'

    else

    begin

    set @i_sql_col = @i_sql_col + ', ' + '[' + @IxColumn + ']'

    if (@i_desc = 1)

    set @i_sql_col = +@i_sql_col + ' DESC'

    end

    FETCH NEXT FROM cIxColumn INTO @IxColumn,@i_include,@i_desc

    END

    CLOSE cIxColumn

    DEALLOCATE cIxColumn

    -- remove leading ','

    if (left(@i_sql_inc,1) = ',')

    set @i_sql_inc = right(@i_sql_inc,len(@i_sql_inc)-1)

    if (left(@i_sql_col,1) = ',')

    set @i_sql_col = right(@i_sql_col,len(@i_sql_col)-1)

    SET @IXSQL = @IXSQL + @i_sql_col + ')'

    if (@i_sql_inc <> '')

    set @IXSQL = @IXSQL + ' INCLUDE (' + @i_sql_inc + ')'

    print @IXSQL

    FETCH NEXT FROM cIX INTO @IxTable, @IxTableID, @IxName, @IxID, @i_schema

    END