Wednesday, 22 February 2017

List Primary Keys For All Tables From Source Data Base

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; ');

No comments:

Post a Comment