Сценарий:
Вие работите като разработчик на 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
Променете скриптове, генерирани от скрипт, за да добавите ограничение на първичния ключ към колоните за идентичност
Как да създадете ограничение за първичен ключ върху колоните за идентичност в базата данни на SQL Server