Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да добавите ограничение за първичен ключ към колони за идентичност към всички таблици в базата данни на SQL Server - SQL Server / TSQL Урок, част 63

Сценарий:

Вие работите като разработчик на 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
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Деактивирайте SA акаунта в SQL Server (пример за T-SQL)

  2. Събития на изчакване на SQL сървър -2

  3. Използване на колона за сортиране в таблица на база данни

  4. SQL Server 2008 празен низ срещу пространство

  5. 4 начина да помогнете за предотвратяване на претоварване на сигнали с наблюдение на SQL сървър