Ban*_*ana 3 sql sql-server indexing sql-server-2012
我知道我可以使用以下命令索引表中的列:
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
Run Code Online (Sandbox Code Playgroud)
但是,我有一个250个模式的数据库,每个模式有10个表.对于每个表,如何检查列是否存在,然后为其创建索引(如果存在)?
我正在使用SQL Server 2012.
Banana答案的一个小变化是使用INFORMATION_SCHEMA.COLUMNS直接获取表的最终列表:
-- Define column to index.
DECLARE @coltoindex VARCHAR(20), @indexoptions VARCHAR(30)
SET @coltoindex = 'Id'
SET @indexoptions = 'UNIQUE'
--USE database_name
--IF OBJECT_ID('tempdb..#tables') IS NOT NULL DROP TABLE #tables
SELECT table_schema, table_name INTO #tables FROM information_schema.columns
where COLUMN_NAME = @coltoindex
DECLARE @schema VARCHAR(30), @table VARCHAR(20), @sqlCommand varchar(1000)
WHILE (SELECT COUNT(*) FROM #tables) > 0
BEGIN
SELECT TOP 1 @schema = table_schema, @table = table_name FROM #tables
SET @sqlCommand = '
CREATE ' + @indexoptions + ' INDEX
idx_' + @schema + '_' + @table + '_' + @coltoindex + '
ON ' + @schema + '.' + @table + ' (' + @coltoindex + ')'
-- print @sqlCommand
EXEC (@sqlCommand)
DELETE FROM #tables WHERE table_schema = @schema AND table_name = @table
END
Run Code Online (Sandbox Code Playgroud)