sqlserver获得数据库非聚集索引的代码

DECLARE @zindex_sql NVARCHAR(max);
SET @zindex_sql = N'';

SELECT @zindex_sql = @zindex_sql + 
N'CREATE ' + 
CASE WHEN r.is_unique=1 THEN N'UNIQUE' ELSE N'' END  +
N' NONCLUSTERED INDEX [' + r.INDEX_name + N'] ON [' + r.schemas_name  +  '].[' + r.tablename + '] ' + r.index_fields + 
CASE WHEN r.include_fields<>N'' THEN N' INCLUDE ' + r.include_fields ELSE N'' END  +
 N' ON [PRIMARY];'
FROM (
SELECT b.object_id AS tid,b.schemas_name, b.name AS tablename,c.name as INDEX_name,
REPLACE(REPLACE(REPLACE((SELECT N'[' + y.name + N']' + CASE WHEN x.is_descending_key=1 THEN N' DESC' ELSE N'' END  AS field_name  
FROM sys.index_columns x 
 INNER JOIN  sys.columns y ON y.object_id = x.object_id AND y.column_id = x.column_id
 WHERE x.object_id=c.object_id AND x.index_id=c.index_id AND x.is_included_column=0 ORDER BY x.key_ordinal FOR XML PATH('')) ,N'</field_name><field_name>',N',')
 ,N'<field_name>',N'(')
 ,N'</field_name>',N')')
  AS index_fields, 
REPLACE(REPLACE(REPLACE((SELECT N'[' + y.name + N']' + CASE WHEN x.is_descending_key=1 THEN N' DESC' ELSE N'' END  AS field_name  
FROM sys.index_columns x 
 INNER JOIN  sys.columns y ON y.object_id = x.object_id AND y.column_id = x.column_id
 WHERE x.object_id=c.object_id AND x.index_id=c.index_id AND x.is_included_column=1 ORDER BY x.key_ordinal FOR XML PATH('')) ,N'</field_name><field_name>',N',')
 ,N'<field_name>',N'(')
 ,N'</field_name>',N')')
  AS include_fields, 
c.* 
FROM (
SELECT a.*,schemas.name AS schemas_name FROM sys.tables AS a
INNER JOIN sys.schemas ON schemas.schema_id = a.schema_id
INNER JOIN (
SELECT * FROM [XServer\PREDEPLOY].DisDb.sys.tables AS [Tables] WHERE Tables.name LIKE N'tbl%') AS b
ON b.name = a.name COLLATE SQL_Latin1_General_CP1_CI_AS
)b
INNER JOIN sys.indexes c ON c.object_id = b.object_id
WHERE c.type=2 AND c.is_primary_key=0
) r
;

SELECT @zindex_sql;

https://www.cnblogs.com/shiyh/p/9431786.html

设置数据库collation

	DECLARE @sql NVARCHAR(max);
	SET @sql = N'';
	SELECT 
		@sql = @sql + N' alter table ' +	[Tables].name  + N' alter column  ' + [Columns].name + N' ' + Types.name  + N'(' + CASE WHEN [Columns].max_length=-1 THEN N'max' else CAST([Columns].max_length/2 AS NVARCHAR(5)) END + N') collate DATABASE_DEFAULT;' + NCHAR(10) + NCHAR(13)           
    FROM sys.tables AS [Tables]
        INNER JOIN sys.columns AS [Columns]
            ON [Tables].object_id = [Columns].object_id
        INNER JOIN sys.types AS [Types]
            ON [Columns].system_type_id = [Types].system_type_id
               AND is_user_defined = 0
               AND [Types].name <> 'sysname'
        LEFT OUTER JOIN sys.extended_properties AS [Properties]
            ON [Properties].major_id = [Tables].object_id
               AND [Properties].minor_id = [Columns].column_id
               AND [Properties].name = 'MS_Description'
    WHERE Columns.collation_name IS NOT NULL AND CHARINDEX(N'tbl' ,[Tables].name)=1
	ORDER BY [Tables].name,[Columns].name

	SELECT @sql;

  

猜你喜欢

转载自www.cnblogs.com/coolyylu/p/11350152.html