2016-05-05 41 views
-6

有一個數據庫。 我後來被列入。 我如何知道這個數據庫?有沒有工具?數據庫分析和理解表

在一個屏幕上的所有表? 關係? 等

注:DB SQL SERVER

謝謝。

+1

爲什麼不在'SQL Server Management Studio'中創建一個'新的數據庫圖',幷包括所有的表? (它繪製您的表格和它們之間的關係。) –

+1

您是否考慮過與知道數據庫的人交談? –

回答

1

有幾個表格和命令可以幫助你。

得到數據庫的ER圖:

創建新的數據庫圖表,包括你想看到 關係表。

知道所有數據庫中的表:

SELECT name Table FROM sys.objects WHERE type = 'U' 

要知道數據庫中的所有存儲過程:

SELECT name Procedure FROM sys.objects WHERE type = 'P' 

要知道相關的表模式,約束上和依賴:

EXEC sp_help <tablename> 

另一個程序我寫幾年前檢查任何依賴關係的一個或多個關鍵字:

/****** Object: StoredProcedure [dbo].[FindObjectsByKeywords] Script Date: 8/25/2015 2:36:31 PM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:  Kunal Chitkara 
-- Description: Find dependencies of the delimited keywords entered in the first input. 
--    Second input specifies the delimiter used, default being comma. 
--    This procedure is dependent upon the utility function 
-- Test Run: EXEC FindObjectsByKeywords @searchString = 'UserId,InstanceID', @delimiter = ',' 
-- ============================================= 
ALTER PROCEDURE [dbo].[FindObjectsByKeywords] 
    @searchString NVARCHAR(MAX) = '', 
    @delimiter NCHAR(1) = ',' 
AS 
BEGIN 

    BEGIN TRY 

     IF (@searchString = '') 
      RAISERROR ('Invalid input', 16, 2) 

     DECLARE @iterator INT = 1, 
       @searchCount INT = 0 

     SELECT value SearchString, ROW_NUMBER() OVER (ORDER BY value) Sort_Order 
     INTO #SearchStrings 
     FROM [dbo].[stringlist_to_table] (@searchString, @delimiter) 

     SELECT @searchCount = MAX(Sort_Order) 
     FROM #SearchStrings 

     DECLARE @Result TABLE 
     (
      Dependency NVARCHAR(256), 
      Type NVARCHAR(120), 
      KeyWords NVARCHAR(MAX) 
     ) 

     WHILE (@iterator <= @searchCount) 
     BEGIN 
      SELECT @searchString = SearchString 
      FROM #SearchStrings 
      WHERE Sort_Order = @iterator 

      INSERT INTO @Result (Dependency, Type, KeyWords) 
      SELECT DISTINCT so.name, sysObj.type_desc, @searchString 
      FROM sysobjects so 
      INNER JOIN syscomments sc ON sc.id = so.id 
      INNER JOIN sys.objects sysObj ON sysObj.object_id = so.id 
      WHERE CHARINDEX(@searchString, sc.text) > 0 
      ORDER BY name 

      SET @iterator = @iterator + 1; 
     END 

     IF EXISTS (SELECT * FROM @Result) 
     BEGIN 
      SELECT 
       P.Dependency, 
       P.Type, 
       STUFF 
       (
        (
         SELECT ',' + KeyWords 
         FROM @Result M 
         WHERE M.Dependency = P.Dependency AND M.Type = P.Type 
         ORDER BY KeyWords 
         FOR XML PATH('') 
        ), 1, 1, '' 
       ) AS KeyWords 
      FROM @Result P 
      WHERE P.Dependency != 'FindObjectsByKeywords' 
      ORDER BY KeyWords, Dependency 

     END 
     ELSE 
      PRINT 'No dependencies of the input keywords found.' 

     DROP TABLE #SearchStrings 
    END TRY 
    BEGIN CATCH 
     IF (ERROR_STATE() = 2) 
     RAISERROR ('Invalid input. Make sure you enter at least one keyword. More keywords can be entered in the first delimited parameter', 16, 1); 
    END CATCH 
END