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

Nhận danh sách các bảng có hoặc không có Ràng buộc khóa chính trong tất cả Cơ sở dữ liệu từ Phiên bản SQL Server - Hướng dẫn SQL Server / TSQL Phần 61

Tình huống:

Bạn đang làm việc với tư cách là nhà phát triển SQL Server / SQL Server DBA cho công ty Bảo hiểm. Bạn đang tạo tài liệu cho các đối tượng cơ sở dữ liệu. Bạn cần lấy danh sách tất cả các bảng từ tất cả cơ sở dữ liệu từ SQL Server Instance mà không có Ràng buộc về Khóa chính.


Giải pháp:

Chúng ta có thể sử dụng dạng xem hệ thống để liệt kê các bảng có Ràng buộc Khóa Chính hoặc không từ mỗi cơ sở dữ liệu. Vì truy vấn phải chạy trên mỗi cơ sở dữ liệu để thu thập thông tin này, chúng tôi cần lặp qua danh sách cơ sở dữ liệu người dùng, chúng tôi sẽ sử dụng con trỏ để thực hiện lặp qua tất cả các cơ sở dữ liệu trên phiên bản SQL Server. Chúng tôi sẽ xây dựng sql động của chúng tôi cho từng cơ sở dữ liệu và lưu kết quả vào bảng tạm thời và cuối cùng chúng tôi sẽ chọn các bản ghi để hiển thị.
USE master
GO

--Declare Variables
DECLARE @DatabaseName AS VARCHAR(500)

--Create Temp Table to Save Results
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
    DROP TABLE #Results

CREATE TABLE #Results (
    ServerName VARCHAR(128)
    ,DatabaseName VARCHAR(128)
    ,SchemaName VARCHAR(128)
    ,TableName VARCHAR(128)
    ,ColumnName VARCHAR(128)
    ,ConstraintName VARCHAR(128)
    ,HasPrimaryKeyConstraint VARCHAR(10)
    )

DECLARE CUR CURSOR
FOR
SELECT '[' + NAME + ']' AS DBName
FROM sys.databases
WHERE NAME NOT IN (
        'master'
        ,'tempdb'
        ,'model'
        ,'msdb'
        )

OPEN Cur

FETCH NEXT
FROM Cur
INTO @DatabaseName

WHILE @@FETCH_STATUS = 0
BEGIN
    --Build dynamic sql for each database 
    DECLARE @SQL VARCHAR(MAX) = NULL

    SET @SQL = 'Insert into #Results
      Select
      @@ServerName,
   T.Table_Catalog as DatabaseName,
   T.Table_Schema AS TableSchema,
   T.Table_Name AS TableName,
   CCU.Column_Name AS ColumnName,
   TC.Constraint_Name AS ConstraintName,
   Case When  TC.Constraint_Name is not Null Then ''Yes''
   Else ''No'' End as HasPrimaryKeyConstraint
From
' + @DatabaseName + '.information_schema.tables T
left join 

   ' + @DatabaseName + '.information_Schema.Table_Constraints TC 
   on T.Table_Catalog=TC.Table_Catalog
   and T.Table_Schema=TC.Table_Schema
   and T.Table_Name=TC.Table_Name
   and TC.Constraint_Type=''PRIMARY KEY''
   
left JOIN
   ' + @DatabaseName + 
'.Information_Schema.constraint_column_usage CCU  
      on TC.Constraint_Name=CCU.Constraint_Name  
      and TC.Table_Name=CCU.Table_Name
      and T.Table_Type=''BASE TABLE'''

    EXEC (@SQL)

    PRINT @SQL

    FETCH NEXT
    FROM Cur
    INTO @DatabaseName
END

CLOSE Cur

DEALLOCATE Cur

--Select all records from temp table 
SELECT *
FROM #Results
 
 
 Tôi thực hiện truy vấn ở trên trên phiên bản SQL Server của mình và đây là danh sách các bảng từ tất cả các cơ sở dữ liệu có ràng buộc Khóa chính nếu có sẵn Null.  Cách lấy tất cả các bảng có hoặc không có Ràng buộc khóa chính trong tất cả cơ sở dữ liệu từ SQL Server Instance-SQL Server / Hướng dẫn TSQL 



  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 cách nào để tuần tự hóa một đồ thị lớn của đối tượng .NET thành BLOB SQL Server mà không cần tạo bộ đệm lớn?

  2. Hướng dẫn đơn giản về cách sử dụng truy vấn con trong SQL Server

  3. Cách chuyển đổi chữ thường thành chữ hoa trong SQL Server - UPPER ()

  4. Nhà cung cấp Microsoft OLE DB cho SQL Server có hỗ trợ TLS 1.2 không

  5. Kiến trúc SQL Server AlwaysOn (Nhóm khả dụng) và Cài đặt từng bước -3 Thất bại thủ công qua các bước