DECLARE @SourceDB sysname = 'DataBaseName'
IF DB_ID(@SourceDB) IS NULL
BEGIN
PRINT 'Error: Unable to find the database ' + @SourceDB + '!!!'
RETURN
END
EXEC ('WITH CTE AS
(
SELECT IC.INDEX_ID + IC.OBJECT_ID AS INDEXID,T.NAME AS TABLENAME
,I.NAME AS INDEXNAME
,CASE WHEN IC.IS_INCLUDED_COLUMN =0 THEN
C.NAME END AS COLUMNNAME
,CASE WHEN IC.IS_INCLUDED_COLUMN =1 THEN
C.NAME END AS INCLUDEDCOLUMN
,I.TYPE_DESC
,I.IS_PRIMARY_KEY,I.IS_UNIQUE
FROM ' + @SOURCEDB + '.SYS.INDEXES I
INNER JOIN ' + @SOURCEDB + '.SYS.INDEX_COLUMNS IC
ON I.INDEX_ID = IC.INDEX_ID
AND I.OBJECT_ID = IC.OBJECT_ID
INNER JOIN ' + @SOURCEDB + '.SYS.COLUMNS C
ON IC.COLUMN_ID = C.COLUMN_ID
AND I.OBJECT_ID = C.OBJECT_ID
INNER JOIN ' + @SOURCEDB + '.SYS.TABLES T
ON I.OBJECT_ID = T.OBJECT_ID
)
SELECT ''' + @SOURCEDB + ''' AS SOURCEDATABASENAME,C.TABLENAME TABLE_NAME,C.INDEXNAME INDEX_NAME,C.TYPE_DESC INDEX_TYPE ,C.IS_PRIMARY_KEY IS_PRIMARY_KEY,C.IS_UNIQUE IS_UNIQUE
,STUFF( ( SELECT '',''+ A.COLUMNNAME FROM CTE A WHERE C.INDEXID = A.INDEXID FOR XML PATH('''')),1 ,1, '''') AS COLUMNS
,STUFF( ( SELECT '',''+ A.INCLUDEDCOLUMN FROM CTE A WHERE C.INDEXID = A.INDEXID FOR XML PATH('''')),1 ,1, '''') AS INCLUDED_COLUMNS
FROM CTE C
GROUP BY C.INDEXID,C.TABLENAME,C.INDEXNAME,C.TYPE_DESC,C.IS_PRIMARY_KEY,C.IS_UNIQUE
ORDER BY C.TABLENAME ASC,C.IS_PRIMARY_KEY DESC; ');
IF DB_ID(@SourceDB) IS NULL
BEGIN
PRINT 'Error: Unable to find the database ' + @SourceDB + '!!!'
RETURN
END
EXEC ('WITH CTE AS
(
SELECT IC.INDEX_ID + IC.OBJECT_ID AS INDEXID,T.NAME AS TABLENAME
,I.NAME AS INDEXNAME
,CASE WHEN IC.IS_INCLUDED_COLUMN =0 THEN
C.NAME END AS COLUMNNAME
,CASE WHEN IC.IS_INCLUDED_COLUMN =1 THEN
C.NAME END AS INCLUDEDCOLUMN
,I.TYPE_DESC
,I.IS_PRIMARY_KEY,I.IS_UNIQUE
FROM ' + @SOURCEDB + '.SYS.INDEXES I
INNER JOIN ' + @SOURCEDB + '.SYS.INDEX_COLUMNS IC
ON I.INDEX_ID = IC.INDEX_ID
AND I.OBJECT_ID = IC.OBJECT_ID
INNER JOIN ' + @SOURCEDB + '.SYS.COLUMNS C
ON IC.COLUMN_ID = C.COLUMN_ID
AND I.OBJECT_ID = C.OBJECT_ID
INNER JOIN ' + @SOURCEDB + '.SYS.TABLES T
ON I.OBJECT_ID = T.OBJECT_ID
)
SELECT ''' + @SOURCEDB + ''' AS SOURCEDATABASENAME,C.TABLENAME TABLE_NAME,C.INDEXNAME INDEX_NAME,C.TYPE_DESC INDEX_TYPE ,C.IS_PRIMARY_KEY IS_PRIMARY_KEY,C.IS_UNIQUE IS_UNIQUE
,STUFF( ( SELECT '',''+ A.COLUMNNAME FROM CTE A WHERE C.INDEXID = A.INDEXID FOR XML PATH('''')),1 ,1, '''') AS COLUMNS
,STUFF( ( SELECT '',''+ A.INCLUDEDCOLUMN FROM CTE A WHERE C.INDEXID = A.INDEXID FOR XML PATH('''')),1 ,1, '''') AS INCLUDED_COLUMNS
FROM CTE C
GROUP BY C.INDEXID,C.TABLENAME,C.INDEXNAME,C.TYPE_DESC,C.IS_PRIMARY_KEY,C.IS_UNIQUE
ORDER BY C.TABLENAME ASC,C.IS_PRIMARY_KEY DESC; ');
No comments:
Post a Comment