Сценарий:
Вие работите като разработчик на SQL Server. Имате това изискване, при което трябва да създадете ограничение на първичен ключ за всички колони за идентичност на всички таблици в базата данни на SQL Server, ако не съществува.Името на първичния ключ трябва да бъде Pk_SchemaName_TableName_ColumnName.
Решение:
Преди всичко трябва да получим списък с таблици, който има колона за идентичност и ограничението на първичния ключ не е създадено върху тях. ще използваме системни таблици и системни изгледи, за да получим всички таблици с колони за идентичност, които нямат ограничения за първичен ключ.След това ще използваме курсора с динамичен SQL, за да генерираме израз Alter за таблица, за да добавим ограничение на първичен ключ и да изпълним скрипта.
ИЗПОЛЗВАЙТЕ YourDatabaseNameGO--Декларирайте променливиDECLARE @DatabaseName КАТО VARCHAR(128 )ДЕКЛАРИРАНЕ @SchemaName КАТО VARCHAR(128)ДЕКЛАРИРАНЕ @TableName КАТО VARCHAR(128)ДЕКЛАРИРАНЕ @ColumnName КАТО VARCHAR(128)DECLARE CUR CURSORFOR--Вземете списък с таблици с колона за идентичност--на които нямат ASDB_Name Primary Key ,Schema_Name(Schema_id) AS TableSchema ,OBJECT_NAME(c.OBJECT_ID) AS TableName ,c.NAME AS ColumnNameFROM sys.columns cINNER JOIN sys.tables t ON c.object_id =t.object_id =t.object_idWHERE 1 CEPT1 тип е_AND'TCLE .Table_Catalog AS DatabaseName ,TC.Table_Schema AS TableSchema ,TC.Table_Name AS TableName ,CCU.Column_Name AS ColumnNameFROM information_Schema.Table_Constraints TCINNER JOIN Information_Schema.constraint_column_>ON TC.Constraint_Name =CCU.Constraint_Name AND TC.Table_Name =CCU.Table_NameWHERE Constraint_Type ='PRIMARY KEY'OPEN CurFETCH NEXTFROM CurINTO @DatabaseName ,@SchemaName ,@SchemaName ,@TableWHilu_Name@TableCHLEMSTANF за всяка база данни DECLARE @SQL VARCHAR(MAX) =NULL SET @SQL ='Промяна на таблица [' + @SchemaName + '].[' + @TableName + ']' + CHAR(10) SET @SQL +='Добавяне на ограничение [Pk_' + @SchemaName+ '_' + @TableName+ '_' + @ColumnName + '] ' SET @SQL +='Първичен ключ ([' + @ColumnName + '])' EXEC (@SQL) ПЕЧАТ @SQL FETCH СЛЕДВАЩ ОТ Cur INTO @DatabaseName ,@ SchemaName ,@TableName ,@ColumnNameENDCLOSE CurDEALLOCATE CurАко искате просто да генерирате изразите alter за добавяне на ограничение на първичния ключ, можете да добавите коментар към частта Exec(@SQL), горният скрипт ще отпечата изрази Alter и можете да стартирате според вашето удобство.
Също така, ако не Не искам да добавям частта от името на схемата към ограничението за първичен ключ, можете да премахнете @SchemaName.
Изпълних заявката по-горе и тя създаде ограничение за първичен ключ върху колоните за идентичност, където липсваше. Променете скриптове, генерирани от скрипт, за да добавите ограничение на първичния ключ към колоните за идентичност
Потвърдих таблиците и ограниченията на първичния ключ бяха създадени успешно. Как да създадете ограничение за първичен ключ върху колоните за идентичност в базата данни на SQL Server