Nejčastější dotazy k katalogu systému SQL Server

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed Instancekoncový bod azure Synapse AnalyticsSQL Analytics v Microsoft FabricWarehouse v Microsoft Fabric

Toto téma obsahuje seznam často kladených otázek. Odpovědi na tyto otázky jsou dotazy založené na katalogových zobrazeních.

Nejčastější dotazy

Níže uvedené sekce uvádějí často kladené otázky podle kategorií.

Datové typy

Tabulky, indexy, pohledy a omezení

Moduly (uložené procedury, User-Defined funkce a spouštěče)

Schémata, uživatelé, role a oprávnění

Odpovědi

Jak najdu všechny tabulky, které nemají shlukovaný index v dané databázi?

Než spustíte následující dotazy, nahraďte <database_name> je platným názvem databáze.

SELECT SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name  
FROM sys.tables AS t  
WHERE NOT EXISTS   
   (  
     SELECT * FROM sys.indexes AS i  
     WHERE i.object_id = t.object_id  
     AND i.type = 1  -- or type_desc = 'CLUSTERED'  
   )  
ORDER BY schema_name, table_name;  
GO  
  

Nebo můžete použít funkci, OBJECTPROPERTY jak je ukázáno v následujícím příkladu.

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(schema_id) AS schema_name, name AS table_name  
FROM sys.tables   
WHERE OBJECTPROPERTY(object_id,'TableHasClustIndex') = 0  
ORDER BY schema_id, name;  
GO  
  

VRCHOL

Jak najdu všechny vlastníky entit obsažených ve specifikovaném schématu?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name> platnými názvy.

USE <database_name>;  
GO  
SELECT 'OBJECT' AS entity_type  
    ,USER_NAME(OBJECTPROPERTY(object_id, 'OwnerId')) AS owner_name  
    ,name   
FROM sys.objects WHERE SCHEMA_NAME(schema_id) = '<schema_name>'  
UNION   
SELECT 'TYPE' AS entity_type  
    ,USER_NAME(TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId')) AS owner_name  
    ,name   
FROM sys.types WHERE SCHEMA_NAME(schema_id) = '<schema_name>'   
UNION  
SELECT 'XML SCHEMA COLLECTION' AS entity_type   
    ,COALESCE(USER_NAME(xsc.principal_id),USER_NAME(s.principal_id)) AS owner_name  
    ,xsc.name   
FROM sys.xml_schema_collections AS xsc JOIN sys.schemas AS s  
    ON s.schema_id = xsc.schema_id  
WHERE s.name = '<schema_name>';  
GO  
  

VRCHOL

Jak najdu všechny tabulky, které nemají primární klíč?

Než spustíte následující dotazy, nahraďte <database_name> je platným názvem databáze.

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(t.schema_id) AS schema_name  
    ,t.name AS table_name  
FROM sys.tables t   
WHERE object_id NOT IN   
   (  
    SELECT parent_object_id   
    FROM sys.key_constraints   
    WHERE type_desc = 'PRIMARY_KEY_CONSTRAINT' -- or type = 'PK'  
    );  
GO  
  

Nebo můžete spustit následující dotaz.

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(schema_id) AS schema_name  
    ,name AS table_name   
FROM sys.tables   
WHERE OBJECTPROPERTY(object_id,'TableHasPrimaryKey') = 0  
ORDER BY schema_name, table_name;  
GO  
  

VRCHOL

Jak najdu všechny tabulky, které nemají index?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem databáze.

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(schema_id) AS schema_name  
    ,name AS table_name  
FROM sys.tables   
WHERE OBJECTPROPERTY(object_id,'IsIndexed') = 0  
ORDER BY schema_name, table_name;  
GO  
  

VRCHOL

Jak najdu všechny tabulky, které mají sloupec identity?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem databáze.

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(schema_id) AS schema_name  
    , t.name AS table_name  
    , c.name AS column_name  
FROM sys.tables AS t  
JOIN sys.identity_columns c ON t.object_id = c.object_id  
ORDER BY schema_name, table_name;  
GO  
  

Nebo můžete spustit následující dotaz.

Poznámka:

Tento dotaz nevrací názvy sloupců.

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(schema_id) AS schema_name  
    ,name AS table_name   
FROM sys.tables   
WHERE OBJECTPROPERTY(object_id,'TableHasIdentity') = 1  
ORDER BY schema_name, table_name;  
GO  
  

VRCHOL

Jak najdu datové typy sloupců v dané tabulce?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name.table_name> platnými názvy.

USE <database_name>;  
GO  
SELECT c.name AS column_name  
    ,c.column_id  
    ,SCHEMA_NAME(t.schema_id) AS type_schema  
    ,t.name AS type_name  
    ,t.is_user_defined  
    ,t.is_assembly_type  
    ,c.max_length  
    ,c.precision  
    ,c.scale  
FROM sys.columns AS c   
JOIN sys.types AS t ON c.user_type_id=t.user_type_id  
WHERE c.object_id = OBJECT_ID('<schema_name.table_name>')  
ORDER BY c.column_id;  
GO  
  

VRCHOL

Jak najdu závislosti na konkrétní funkci?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name.function_name> platnými názvy.

USE <database_name>;  
GO  
SELECT OBJECT_NAME(object_id) AS referencing_object_name  
    ,COALESCE(COL_NAME(object_id, column_id), '(n/a)') AS referencing_column_name  
    ,*  
FROM sys.sql_dependencies  
WHERE referenced_major_id = OBJECT_ID('<schema_name.function_name>')  
ORDER BY OBJECT_NAME(object_id), COL_NAME(object_id, column_id);  
GO  
  

VRCHOL

Jak najdu všechny uložené procedury v databázi?

Než spustíte následující dotaz, nahraďte <database_name> ho platným jménem.

  
USE <database_name>;  
GO  
SELECT name AS procedure_name   
    ,SCHEMA_NAME(schema_id) AS schema_name  
    ,type_desc  
    ,create_date  
    ,modify_date  
FROM sys.procedures;  
GO  
  

VRCHOL

Jak najdu parametry pro specifickou uloženou proceduru nebo funkci?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name.object_name> platnými názvy.

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(schema_id) AS schema_name  
    ,o.name AS object_name  
    ,o.type_desc  
    ,p.parameter_id  
    ,p.name AS parameter_name  
    ,TYPE_NAME(p.user_type_id) AS parameter_type  
    ,p.max_length  
    ,p.precision  
    ,p.scale  
    ,p.is_output  
FROM sys.objects AS o  
INNER JOIN sys.parameters AS p ON o.object_id = p.object_id  
WHERE o.object_id = OBJECT_ID('<schema_name.object_name>')  
ORDER BY schema_name, object_name, p.parameter_id;  
GO  
  

VRCHOL

Jak najdu všechny uživatelsky definované funkce v databázi?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem databáze.

USE <database_name>;  
GO  
SELECT name AS function_name   
  ,SCHEMA_NAME(schema_id) AS schema_name  
  ,type_desc  
  ,create_date  
  ,modify_date  
FROM sys.objects  
WHERE type_desc LIKE '%FUNCTION%';  
GO  
  

VRCHOL

Jak najdu všechny pohledy v databázi?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem databáze.

USE <database_name>;  
GO  
SELECT name AS view_name   
  ,SCHEMA_NAME(schema_id) AS schema_name  
  ,OBJECTPROPERTYEX(object_id,'IsIndexed') AS IsIndexed  
  ,OBJECTPROPERTYEX(object_id,'IsIndexable') AS IsIndexable  
  ,create_date  
  ,modify_date  
FROM sys.views;  
  

VRCHOL

Jak najdu všechny entity, které byly za posledních N dní upraveny?

Než spustíte následující dotaz, nahraďte <database_name> a <n_days> platnými hodnotami.

USE <database_name>;  
GO  
SELECT name AS object_name   
  ,SCHEMA_NAME(schema_id) AS schema_name  
  ,type_desc  
  ,create_date  
  ,modify_date  
FROM sys.objects  
WHERE modify_date > GETDATE() - <n_days>  
ORDER BY modify_date;  
GO  
  

VRCHOL

Jak najdu typy dat LOB pro specifickou tabulku?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name.table_name> platnými názvy.

  
USE <database_name>;  
GO  
SELECT name AS column_name   
    ,column_id   
    ,TYPE_NAME(user_type_id) AS type_name  
    ,max_length  
    ,CASE   
       WHEN max_length = -1 AND TYPE_NAME(user_type_id) <> 'xml'  
            THEN 1  
            ELSE 0  
     END AS [(max)]  
FROM sys.columns  
WHERE object_id=OBJECT_ID('<schema_name.table_name>')   
    AND ( TYPE_NAME(user_type_id) IN ('xml','text', 'ntext','image')  
         OR (TYPE_NAME(user_type_id) IN ('varchar','nvarchar','varbinary')  
         AND max_length = -1)  
        );  
GO  
  

VRCHOL

Jak mám vnímat definici modulu?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name.object_name> platnými názvy.

USE <database_name>;  
GO  
SELECT definition  
FROM sys.sql_modules  
WHERE object_id = OBJECT_ID('<schema_name.object_name>');  
GO  
  

Nebo můžete použít funkci, OBJECT_DEFINITION jak je ukázáno v následujícím příkladu.

USE <database_name>;  
GO  
SELECT OBJECT_DEFINITION (OBJECT_ID('<schema_name.object_name>')) AS ObjectDefinition;  
GO  
  

VRCHOL

Jak mám vnímat definici spouštěče na úrovni serveru?

SELECT definition  
FROM sys.server_sql_modules;  
GO  
  

VRCHOL

Jak najdu sloupce primárního klíče pro specifickou tabulku?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name.table_name> platnými názvy.

USE <database_name>;  
GO  
SELECT i.name AS index_name  
    ,ic.index_column_id  
    ,key_ordinal  
    ,c.name AS column_name  
    ,TYPE_NAME(c.user_type_id)AS column_type   
    ,is_identity  
FROM sys.indexes AS i  
INNER JOIN sys.index_columns AS ic   
    ON i.object_id = ic.object_id AND i.index_id = ic.index_id  
INNER JOIN sys.columns AS c   
    ON ic.object_id = c.object_id AND c.column_id = ic.column_id  
WHERE i.is_primary_key = 1   
    AND i.object_id = OBJECT_ID('<schema_name.table_name>');  
GO  
  

Nebo můžete použít funkci, COL_NAME jak je ukázáno v následujícím příkladu.

USE <database_name>;  
GO  
SELECT i.name AS index_name  
    ,COL_NAME(ic.object_id,ic.column_id) AS column_name  
    ,ic.index_column_id  
    ,key_ordinal  
FROM sys.indexes AS i  
INNER JOIN sys.index_columns AS ic   
    ON i.object_id = ic.object_id AND i.index_id = ic.index_id  
WHERE i.is_primary_key = 1   
    AND i.object_id = OBJECT_ID('<schema_name.table_name>');  
GO  
  

VRCHOL

Jak najdu sloupce cizího klíče pro specifickou tabulku?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name.table_name> platnými názvy.

USE <database_name>;  
GO  
SELECT   
    f.name AS foreign_key_name  
   ,OBJECT_NAME(f.parent_object_id) AS table_name  
   ,COL_NAME(fc.parent_object_id, fc.parent_column_id) AS constraint_column_name  
   ,OBJECT_NAME (f.referenced_object_id) AS referenced_object  
   ,COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS referenced_column_name  
   ,is_disabled  
   ,delete_referential_action_desc  
   ,update_referential_action_desc  
FROM sys.foreign_keys AS f  
INNER JOIN sys.foreign_key_columns AS fc   
   ON f.object_id = fc.constraint_object_id   
WHERE f.parent_object_id = OBJECT_ID('<schema_name.table_name>');  
  

VRCHOL

Jak zjistím, zda jsou oprávnění udělena nebo zamítnuta konkrétnímu principalovi? Následující příklad vytváří funkci, která vrací název entity, na které jsou oprávnění kontrolována. Funkce je vyvolána v následujících dotazech. Funkce musí být vytvořena v každé databázi, ve které chcete kontrolovat oprávnění.

-- Create a function to return the name of the entity on which the permissions are checked.  
IF OBJECT_ID (N'dbo.entity_instance_name', N'FN') IS NOT NULL  
    DROP FUNCTION dbo.entity_instance_name;  
GO  
CREATE FUNCTION dbo.entity_instance_name(@class_desc nvarchar(60), @major_id int)   
RETURNS sysname AS  
BEGIN  
    DECLARE @the_entity_name sysname  
    SELECT @the_entity_name = CASE  
        WHEN @class_desc = 'DATABASE' THEN DB_NAME()  
        WHEN @class_desc = 'SCHEMA' THEN SCHEMA_NAME(@major_id)  
        WHEN @class_desc = 'OBJECT_OR_COLUMN' THEN OBJECT_NAME(@major_id)  
        WHEN @class_desc = 'DATABASE_PRINCIPAL' THEN USER_NAME(@major_id)  
        WHEN @class_desc = 'ASSEMBLY' THEN   
            (SELECT name FROM sys.assemblies WHERE assembly_id=@major_id)  
        WHEN @class_desc = 'TYPE' THEN TYPE_NAME(@major_id)  
        WHEN @class_desc = 'XML_SCHEMA_COLLECTION' THEN   
            (SELECT name FROM sys.xml_schema_collections  
              WHERE xml_collection_id=@major_id)  
        WHEN @class_desc = 'MESSAGE_TYPE' THEN   
            (SELECT name FROM sys.service_message_types WHERE message_type_id=@major_id)  
        WHEN @class_desc = 'SERVICE_CONTRACT' THEN   
           (SELECT name FROM sys.service_contracts  
              WHERE service_contract_id=@major_id)  
        WHEN @class_desc = 'SERVICE' THEN  
          (SELECT name FROM sys.services WHERE service_id=@major_id)  
        WHEN @class_desc = 'REMOTE_SERVICE_BINDING' THEN  
          (SELECT name FROM sys.remote_service_bindings  
             WHERE remote_service_binding_id=@major_id)  
        WHEN @class_desc = 'ROUTE' THEN  
          (SELECT name FROM sys.routes WHERE route_id=@major_id)  
        WHEN @class_desc = 'FULLTEXT_CATALOG' THEN  
          (SELECT name FROM sys.fulltext_catalogs WHERE fulltext_catalog_id=@major_id)  
        WHEN @class_desc = 'SYMMETRIC_KEY' THEN  
          (SELECT name FROM sys.symmetric_keys WHERE symmetric_key_id=@major_id)  
        WHEN @class_desc = 'CERTIFICATE' THEN  
          (SELECT name FROM sys.certificates WHERE certificate_id=@major_id)  
        WHEN @class_desc = 'ASYMMETRIC_KEY' THEN  
          (SELECT name FROM sys.asymmetric_keys WHERE asymmetric_key_id=@major_id)  
        WHEN @class_desc = 'SERVER' THEN   
             (SELECT name FROM sys.servers WHERE server_id=@major_id)  
        WHEN @class_desc = 'SERVER_PRINCIPAL' THEN SUSER_NAME(@major_id)  
        WHEN @class_desc = 'ENDPOINT' THEN   
             (SELECT name FROM sys.endpoints WHERE endpoint_id=@major_id)        
        ELSE '?'  
    END  
    RETURN @the_entity_name  
END;  
GO  
-- Return server-level permissions for the user.  
SELECT class  
    ,class_desc  
    ,dbo.entity_instance_name(class_desc, major_id) AS entity_name   
    ,minor_id  
    ,SUSER_NAME(grantee_principal_id) AS grantee  
    ,SUSER_NAME(grantor_principal_id) AS grantor  
    ,type  
    ,permission_name  
    ,state_desc   
FROM sys.server_permissions   
WHERE grantee_principal_id = SUSER_ID('public');  
GO  
-- Return database-level permissions for the user.  
SELECT class  
    ,class_desc  
    ,dbo.entity_instance_name(class_desc , major_id) AS entity_name   
    ,minor_id  
    ,USER_NAME(grantee_principal_id) AS grantee  
    ,USER_NAME(grantor_principal_id) AS grantor  
    ,type  
    ,permission_name  
    ,state_desc     
FROM  sys.database_permissions   
WHERE grantee_principal_id = DATABASE_PRINCIPAL_ID('public');  
GO  

VRCHOL

Jak zjistím, zda je sloupec použit ve vypočteném sloupcovém výrazu?

Než spustíte následující dotaz, nahraďte <database_name>, <schema_name.table_name>, a <column_name> platnými názvy.

USE <database_name>;  
GO  
SELECT OBJECT_NAME(object_id) AS object_name  
    ,COL_NAME(object_id, column_id) AS computed_column   
    ,class_desc  
    ,is_selected  
    ,is_updated  
    ,is_select_all  
FROM sys.sql_dependencies  
WHERE referenced_major_id = OBJECT_ID('<schema_name.table_name>')  
    AND referenced_minor_id = COLUMNPROPERTY(referenced_major_id, '<column_name>', 'ColumnId')  
    AND class = 1;  
GO  
  

VRCHOL

Jak najdu všechny sloupce, které se používají ve vypočteném sloupcovém výrazu?

Než spustíte následující dotaz, nahraďte <database_name> ho platným jménem.

USE <database_name>;  
GO  
SELECT OBJECT_NAME(d.referenced_major_id) AS object_name  
    ,COL_NAME(d.referenced_major_id, d.referenced_minor_id) AS column_name  
    ,OBJECT_NAME(referenced_major_id) AS dependent_object_name   
    ,COL_NAME(d.object_id, d.column_id) AS dependent_computed_column  
    ,cc.definition AS computed_column_definition  
FROM sys.sql_dependencies AS d  
JOIN sys.computed_columns AS cc   
    ON cc.object_id = d.object_id AND cc.column_id = d.column_id AND d.object_id=d.referenced_major_id       
WHERE d.class = 1  
ORDER BY object_name, column_name;  
GO  
  

VRCHOL

Jak najdu sloupce, které závisí na specifikovaném uživatelsky definovaném typu CLR nebo typu aliasu?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem a <schema_name.data_type_name> platným, schématu kvalifikovaným CLR uživatelsky definovaným typem nebo schématově kvalifikovaným aliasem. Následující dotaz vyžaduje členství v roli db_owner nebo oprávnění pro zobrazení všech metadat závislých sloupců a vypočtených sloupců v databázi.

USE <database_name>;  
GO  
SELECT OBJECT_NAME(object_id) AS object_name   
    ,c.name AS column_name   
    ,SCHEMA_NAME(t.schema_id) AS schema_name  
    ,TYPE_NAME(c.user_type_id) AS user_type_name  
    ,c.max_length  
    ,c.precision  
    ,c.scale  
    ,c.is_nullable  
    ,c.is_computed  
FROM sys.columns AS c  
INNER JOIN sys.types AS t ON c.user_type_id = t.user_type_id  
WHERE c.user_type_id = TYPE_ID('<schema_name.data_type_name>');   
GO  
  

Následující dotaz vrací omezený a úzký pohled na sloupce závislý na uživatelsky definovaném typu nebo aliasu CLR, ale výsledná sada je viditelná pro veřejnou roli. Tento dotaz můžete použít, pokud jste udělili REFERENCE oprávnění na svůj uživatelsky definovaný typ ostatním a nemáte oprávnění zobrazit metadata objektů, které ostatní vytvořili a které tento typ používají.

USE <database_name>;  
GO  
SELECT OBJECT_NAME(object_id) AS object_name   
    ,COL_NAME(object_id, column_id) AS column_name  
    ,TYPE_NAME(user_type_id) AS user_type  
FROM sys.column_type_usages  
WHERE user_type_id = TYPE_ID('<schema_name.data_type_name>');  
GO  
  

VRCHOL

Jak najdu vypočítané sloupce, které závisí na specifikovaném uživatelsky definovaném typu CLR nebo typu aliasu?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem a <schema_name.data_type_name> platným, schématou kvalifikovaným CLR uživatelsky definovaným typem, alias typovým jménem.

USE <database_name>;  
GO  
SELECT OBJECT_NAME(object_id) AS object_name  
    ,COL_NAME(object_id, column_id) AS column_name  
FROM sys.sql_dependencies  
WHERE referenced_major_id = TYPE_ID('<schema_name.data_type_name>')  
    AND class = 2 -- schema-bound references to type  
    AND OBJECTPROPERTY(object_id, 'IsTable') = 1;   -- exclude non-table dependencies  
  

VRCHOL

Jak najdu parametry, které závisí na specifikovaném uživatelsky definovaném typu CLR nebo typu aliasu?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem a <schema_name.data_type_name> platným, schématou kvalifikovaným CLR uživatelsky definovaným typem, alias typovým jménem. Následující dotaz vyžaduje členství v roli db_owner nebo oprávnění pro zobrazení všech metadat závislých sloupců a vypočtených sloupců v databázi.

USE <database_name>;  
GO  
SELECT OBJECT_NAME(object_id) AS object_name  
    ,NULL AS procedure_number  
    ,name AS param_name  
    ,parameter_id AS param_num  
    ,TYPE_NAME(p.user_TYPE_ID) AS type_name  
FROM sys.parameters AS p  
WHERE p.user_TYPE_ID = TYPE_ID('<schema_name.data_type_name>')  
UNION   
SELECT OBJECT_NAME(object_id) AS object_name  
    ,procedure_number  
    ,name AS param_name  
    ,parameter_id AS param_num  
    ,TYPE_NAME(p.user_TYPE_ID) AS type_name  
FROM sys.numbered_procedure_parameters AS p  
WHERE p.user_TYPE_ID = TYPE_ID('<schema_name.data_type_name>')  
ORDER BY object_name, procedure_number, param_num;  
GO  
  

Následující dotaz vrací omezený a úzký pohled na parametry, které závisí na uživatelsky definovaném typu nebo aliasu CLR, ale výsledná sada je viditelná pro veřejnou roli. Tento dotaz můžete použít, pokud jste udělili REFERENCE oprávnění na svůj uživatelsky definovaný typ ostatním a nemáte oprávnění zobrazit metadata objektů, které ostatní vytvořili a které tento typ používají.

USE <database_name>;  
GO  
SELECT OBJECT_NAME(object_id) AS object_name  
    ,parameter_id  
    ,TYPE_NAME(user_type_id) AS type_name  
FROM sys.parameter_type_usages   
WHERE user_type_id = TYPE_ID('<schema_name.data_type_name>');  
GO  
  

VRCHOL

Jak najdu CHECK omezení, která závisí na specifikovaném uživatelsky definovaném typu CLR?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem a <schema_name.data_type_name> platným, schématově kvalifikovaným uživatelsky definovaným CLR typem.

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(o.schema_id) AS schema_name  
    ,OBJECT_NAME(o.parent_object_id) AS table_name  
    ,OBJECT_NAME(o.object_id) AS constraint_name  
FROM sys.sql_dependencies AS d  
JOIN sys.objects AS o ON o.object_id = d.object_id  
WHERE referenced_major_id = TYPE_ID('<schema_name.data_type_name>')  
    AND class = 2 -- schema-bound references to type  
    AND OBJECTPROPERTY(o.object_id, 'IsCheckCnst') = 1; -- exclude non-CHECK dependencies  
GO  
  

VRCHOL

Jak najdu zobrazení, Transact-SQL funkce a Transact-SQL uložené procedury, které závisí na specifikovaném uživatelsky definovaném typu CLR nebo typu aliasu?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem a <schema_name.data_type_name> platným, schématou kvalifikovaným CLR uživatelsky definovaným typem, alias typovým jménem.

Parametry definované ve funkci nebo postupu jsou implicitně omezeny schématem. Proto lze parametry, které závisí na uživatelsky definovaném typu CLR nebo typu aliasu, zobrazit pomocí katalogového zobrazení sys.sql_dependencies . Postupy a spouštěče nejsou omezeny schématem. To znamená, že závislosti mezi jakýmkoli výrazem definovaným v těle procedury nebo spouštěče a uživatelsky definovaným typem nebo aliasem CLR nejsou udržovány. Pohledy omezené schématem a uživatelsky definované funkce, které mají výrazy závislé na uživatelsky definovaném typu nebo aliasu CLR, jsou uchovávány v katalogovém zobrazení sys.sql_dependencies . Závislosti mezi typy a funkcemi CLR a CLR postupy nejsou udržovány.

Následující dotaz vrací všechny závislosti vázané na schémata v pohledech, Transact-SQL funkcích a Transact-SQL uložených procedurách pro specifikovaný uživatelsky definovaný typ nebo alias typ CLR.

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(o.schema_id) AS dependent_object_schema  
  ,OBJECT_NAME(o.object_id) AS dependent_object_name  
  ,o.type_desc AS dependent_object_type  
  ,d.class_desc AS kind_of_dependency  
  ,TYPE_NAME (d.referenced_major_id) AS type_name  
FROM sys.sql_dependencies AS d   
JOIN sys.objects AS o  
  ON d.object_id = o.object_id  
  AND o.type IN ('FN','IF','TF', 'V', 'P')  
WHERE d.class = 2 -- dependencies on types  
  AND d.referenced_major_id = TYPE_ID('<schema_name.data_type_name>')  
ORDER BY dependent_object_schema, dependent_object_name;  
GO  
  

VRCHOL

Jak najdu všechna omezení pro zadanou tabulku?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name.table_name> platnými názvy.

USE <database_name>;  
GO  
SELECT OBJECT_NAME(object_id) as constraint_name  
    ,SCHEMA_NAME(schema_id) AS schema_name  
    ,OBJECT_NAME(parent_object_id) AS table_name  
    ,type_desc  
    ,create_date  
    ,modify_date  
    ,is_ms_shipped  
    ,is_published  
    ,is_schema_published  
FROM sys.objects  
WHERE type_desc LIKE '%CONSTRAINT'   
    AND parent_object_id = OBJECT_ID('<schema_name.table_name>');  
GO  
  

VRCHOL

Jak najdu všechny indexy pro zadanou tabulku?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name.table_name> platnými názvy.

USE <database_name>;  
GO  
SELECT i.name AS index_name  
    ,i.type_desc  
    ,is_unique  
    ,ds.type_desc AS filegroup_or_partition_scheme  
    ,ds.name AS filegroup_or_partition_scheme_name  
    ,ignore_dup_key  
    ,is_primary_key  
    ,is_unique_constraint  
    ,fill_factor  
    ,is_padded  
    ,is_disabled  
    ,allow_row_locks  
    ,allow_page_locks  
FROM sys.indexes AS i  
INNER JOIN sys.data_spaces AS ds ON i.data_space_id = ds.data_space_id  
WHERE is_hypothetical = 0 AND i.index_id <> 0   
AND i.object_id = OBJECT_ID('<schema_name.table_name>');  
GO  
  

VRCHOL

Jak najdu všechny objekty, které mají specifikovaný název sloupce?

Než spustíte následující dotaz, nahraďte <database_name> a <column_name> platnými názvy.

USE <database_name>;  
GO  
SELECT OBJECT_NAME(object_id)  
FROM sys.columns  
WHERE name = '<column_name>';  
GO  
  

Nebo

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(o.schema_id) AS schema_name   
    ,o.name AS object_name  
    ,type_desc  
FROM sys.objects AS o  
INNER JOIN sys.columns AS c ON o.object_id = c.object_id  
WHERE c.name = '<column_name>';  
GO  
  

VRCHOL

Jak najdu všechny uživatelsky definované tabulky v určené databázi?

Než spustíte následující dotaz, nahraďte <database_name> ho platným jménem.

USE <database_name>;  
GO  
SELECT *   
FROM sys.tables;  
GO  
  

VRCHOL

Jak najdu všechny tabulky a indexy, které jsou rozdělené?

Než spustíte následující dotaz, nahraďte <database_name> ho platným jménem.

USE <database_name>;  
GO  
SELECT SCHEMA_NAME(o.schema_id) AS schema_name  
    ,OBJECT_NAME(p.object_id) AS table_name  
    ,i.name AS index_name  
    ,p.partition_number  
    ,rows   
FROM sys.partitions AS p  
INNER JOIN sys.indexes AS i ON p.object_id = i.object_id AND p.index_id = i.index_id  
INNER JOIN sys.partition_schemes ps ON i.data_space_id=ps.data_space_id  
INNER JOIN sys.objects AS o ON o.object_id = i.object_id  
ORDER BY index_name, partition_number;  
GO  
  

VRCHOL

Jak najdu všechny statistiky o konkrétním objektu?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem a <schema_name.object_name> platným názvem tabulky, indexovaného pohledu nebo funkce s tabulkovou hodnotou.

USE <database_name>;  
GO  
SELECT name AS statistics_name  
    ,stats_id  
    ,auto_created  
    ,user_created  
    ,no_recompute  
FROM sys.stats  
WHERE object_id = OBJECT_ID('<schema_name.object_name>');  
GO  
  

VRCHOL

Jak najdu všechny statistiky a sloupce statistik na konkrétním objektu?

Než spustíte následující dotaz, nahraďte <database_name> ho platným názvem a <schema_name.object_name> platným názvem tabulky, indexovaného pohledu nebo funkce s tabulkovou hodnotou.

USE <database_name>;  
GO  
SELECT s.name AS statistics_name  
    ,c.name AS column_name  
    ,sc.stats_column_id  
FROM sys.stats AS s  
INNER JOIN sys.stats_columns AS sc   
    ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id  
INNER JOIN sys.columns AS c   
    ON sc.object_id = c.object_id AND c.column_id = sc.column_id  
WHERE s.object_id = OBJECT_ID('<schema_name.object_name>');  
GO  
  

VRCHOL

Jak najdu definici pohledu?

Než spustíte následující dotaz, nahraďte <database_name> a <schema_name.object_name> platnými názvy.

USE <database_name>;  
GO  
SELECT definition  
FROM sys.sql_modules  
WHERE object_id = OBJECT_ID('<schema_name.object_name>');  
GO  
  

Nebo můžete použít funkci, OBJECT_DEFINITION jak je ukázáno v následujícím příkladu.

USE <database_name>;  
GO  
SELECT OBJECT_DEFINITION (OBJECT_ID('<schema_name.object_name>')) AS ObjectDefinition;  
GO  
  

VRCHOL

Viz také