Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tập lệnh SQL để thay đổi TẤT CẢ các phím ngoại để thêm BẬT XÓA CASCADE

Đây là một tập lệnh tôi đã sử dụng cho một mục đích tương tự. Nó không hỗ trợ các khóa ngoại hỗn hợp (sử dụng nhiều hơn một trường.) Và nó có thể sẽ cần một số điều chỉnh trước khi nó hoạt động trong trường hợp của bạn. CHỈNH SỬA:Đặc biệt là nó không xử lý các khóa ngoại nhiều cột một cách chính xác.

select
  DropStmt = 'ALTER TABLE [' + ForeignKeys.ForeignTableSchema + 
      '].[' + ForeignKeys.ForeignTableName + 
      '] DROP CONSTRAINT [' + ForeignKeys.ForeignKeyName + ']; '
,  CreateStmt = 'ALTER TABLE [' + ForeignKeys.ForeignTableSchema + 
      '].[' + ForeignKeys.ForeignTableName + 
      '] WITH CHECK ADD CONSTRAINT [' +  ForeignKeys.ForeignKeyName + 
      '] FOREIGN KEY([' + ForeignKeys.ForeignTableColumn + 
      ']) REFERENCES [' + schema_name(sys.objects.schema_id) + '].[' +
  sys.objects.[name] + ']([' +
  sys.columns.[name] + ']) ON DELETE CASCADE; '
 from sys.objects
  inner join sys.columns
    on (sys.columns.[object_id] = sys.objects.[object_id])
  inner join (
    select sys.foreign_keys.[name] as ForeignKeyName
     ,schema_name(sys.objects.schema_id) as ForeignTableSchema
     ,sys.objects.[name] as ForeignTableName
     ,sys.columns.[name]  as ForeignTableColumn
     ,sys.foreign_keys.referenced_object_id as referenced_object_id
     ,sys.foreign_key_columns.referenced_column_id as referenced_column_id
     from sys.foreign_keys
      inner join sys.foreign_key_columns
        on (sys.foreign_key_columns.constraint_object_id
          = sys.foreign_keys.[object_id])
      inner join sys.objects
        on (sys.objects.[object_id]
          = sys.foreign_keys.parent_object_id)
        inner join sys.columns
          on (sys.columns.[object_id]
            = sys.objects.[object_id])
           and (sys.columns.column_id
            = sys.foreign_key_columns.parent_column_id)
    ) ForeignKeys
    on (ForeignKeys.referenced_object_id = sys.objects.[object_id])
     and (ForeignKeys.referenced_column_id = sys.columns.column_id)
 where (sys.objects.[type] = 'U')
  and (sys.objects.[name] not in ('sysdiagrams'))


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. làm thế nào để tìm kiếm các thủ tục được lưu trữ trong Sql Server 2008 R2 cho một chuỗi?

  2. Ràng buộc mặc định trong SQL Server là gì - Hướng dẫn sử dụng SQL Server / TSQL Phần 90

  3. SQL:Lấy số lượng từ nhiều bảng cho một bản ghi người dùng trong bảng USER. Cách tiếp cận tốt nhất là gì?

  4. Tự động tăng chỉ mục cho Microsoft SQL Server 2008 R2

  5. Cách hoạt động của hàm STRING_ESCAPE () trong SQL Server (T-SQL)