シナリオ:
あなたはSQLServer開発者として働いています。存在しない場合は、SQLServerデータベースのすべてのテーブルのすべてのID列に主キー制約を作成する必要があるというこの要件があります。主キー名はPk_SchemaName_TableName_ColumnNameである必要があります。
解決策:
まず、ID列があり、主キー制約が作成されていないテーブルのリストを取得する必要があります。システムテーブルとシステムビューを使用して、主キー制約のないID列を持つすべてのテーブルを取得します。次に、動的SQLでCursorを使用して、テーブルのAlterステートメントを生成し、主キー制約を追加してスクリプトを実行します。
USE YourDatabaseName GO --Declare Variables DECLARE @DatabaseName AS VARCHAR(128) DECLARE @SchemaName AS VARCHAR(128) DECLARE @TableName AS VARCHAR(128) DECLARE @ColumnName AS VARCHAR(128) DECLARE CUR CURSOR FOR --Get list of tables with Identity Column --on which have no Primary Key SELECT DB_Name() AS DatabaseName ,Schema_Name(Schema_id) AS TableSchema ,OBJECT_NAME(c.OBJECT_ID) AS TableName ,c.NAME AS ColumnName FROM sys.columns c INNER JOIN sys.tables t ON c.object_id = t.object_id WHERE is_identity = 1 AND type_desc = 'USER_TABLE' EXCEPT SELECT TC.Table_Catalog AS DatabaseName ,TC.Table_Schema AS TableSchema ,TC.Table_Name AS TableName ,CCU.Column_Name AS ColumnName FROM information_Schema.Table_Constraints TC INNER JOIN Information_Schema.constraint_column_usage CCU
ON TC.Constraint_Name = CCU.Constraint_Name AND TC.Table_Name = CCU.Table_Name WHERE Constraint_Type = 'PRIMARY KEY' OPEN Cur FETCH NEXT FROM Cur INTO @DatabaseName ,@SchemaName ,@TableName ,@ColumnName WHILE @@FETCH_STATUS = 0 BEGIN --Build dynamic sql for each database DECLARE @SQL VARCHAR(MAX) = NULL SET @SQL = 'Alter Table [' + @SchemaName + '].[' + @TableName + ']' + CHAR(10) SET @SQL += 'Add Constraint [Pk_' + @SchemaName
+ '_' + @TableName
+ '_' + @ColumnName + '] ' SET @SQL += 'Primary Key ([' + @ColumnName + '])' EXEC (@SQL) PRINT @SQL FETCH NEXT FROM Cur INTO @DatabaseName ,@SchemaName ,@TableName ,@ColumnName END CLOSE Cur DEALLOCATE Cur
主キー制約を追加するためのalterステートメントを生成するだけの場合は、Exec(@SQL)部分にコメントを追加できます。上記のスクリプトはAlterステートメントを出力し、都合の良いときに実行できます。
また、主キー制約にスキーマ名の部分を追加したくない場合は、@ SchemaNameを削除できます。
上記のクエリを実行すると、欠落しているID列に主キー制約が作成されました。 主キー制約をID列に追加するためにスクリプトによって生成されたスクリプトを変更する
確認しましたテーブルと主キー制約が正常に作成されました。 SQLServerデータベースのID列に主キー制約を作成する方法