AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 31436
Accepted
Kahn
Kahn
Asked: 2013-01-05 07:10:15 +0800 CST2013-01-05 07:10:15 +0800 CST 2013-01-05 07:10:15 +0800 CST

SQL Server 2008 - Como resolvi a necessidade de verificar as definições das colunas rapidamente?

  • 772

Outra ferramenta que desenvolvi para mim, no que diz respeito a facilitar a criação de várias operações DML em um grande banco de dados de centenas de tabelas, é uma função definida pelo usuário bacana para mostrar facilmente quase todas as informações relevantes sobre uma coluna. A execução da função exibirá o tipo, comprimento, restrições de chave em potencial (FK ou PK), índices em potencial, bem como acionadores em potencial vinculados à coluna.

Código postado na resposta abaixo. Pode haver situações em que a função não funcione, dependendo de algumas configurações do banco de dados ou funcionalidades inexistentes em nosso projeto. Mas deve ser relativamente dinâmico.

Novamente, se você tiver alguma dica ou conselho útil semelhante, não hesite em compartilhar!

sql-server-2008 functions
  • 2 2 respostas
  • 210 Views

2 respostas

  • Voted
  1. Best Answer
    Kahn
    2013-01-05T07:10:15+08:002013-01-05T07:10:15+08:00

    Execute o seguinte script para criar a função:

    
    IF EXISTS (SELECT * FROM sys.objects WHERE name = 'getColDef')
        DROP FUNCTION dbo.getColDef;
    GO
    
    CREATE FUNCTION getColDef (@TAB_AND_COL VARCHAR(256))
    RETURNS @RESULT TABLE
       ([Table] varchar(256),
        [Column] varchar(256),
        [Type] varchar(64),
        [Length] int,
        [IsNullable] varchar(5),
        [FK_Name] varchar(256),
        [Index_Name] varchar(256),
        [Trigger_Name] varchar(256))
    AS
    BEGIN
       DECLARE @TNAME VARCHAR(256), @COL VARCHAR(256), @CHARIX INT
    
        SET @CHARIX = CHARINDEX('.', @TAB_AND_COL)
        SET @TNAME = LEFT(@TAB_AND_COL, CHARINDEX('.',@TAB_AND_COL)-1)
        SET @COL = SUBSTRING(@TAB_AND_COL, @CHARIX + 1, LEN(@TAB_AND_COL) - LEN(@TNAME))
    
        INSERT INTO @RESULT
            SELECT DISTINCT OBJECT_NAME(c.OBJECT_ID) [Table],c.name [Column],t.name AS [Type],c.max_length AS [Length]
                , CASE C.is_nullable WHEN 1 THEN 'Yes' ELSE 'No' END AS [IsNullable]
                , FK.FK_NAME as FK_Name
                , IDX.IdxName as Index_Name
                , trig.name as Trigger_Name
            FROM sys.columns c
            JOIN sys.types t ON c.user_type_id=t.user_type_id
            LEFT JOIN 
                (SELECT f.name AS FK_NAME
                    , OBJECT_NAME(f.parent_object_id) AS FK_TABNAME
                FROM sys.foreign_keys AS f
                INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
                WHERE OBJECT_NAME(f.parent_object_id) = @TNAME
                AND COL_NAME(fc.parent_object_id,fc.parent_column_id) = @COL) FK 
                    ON FK.FK_TABNAME = OBJECT_NAME(c.OBJECT_ID)
            LEFT JOIN 
                (SELECT i.Name AS IdxName, OBJECT_NAME(i.object_ID) AS TName, c.Name AS CName
                FROM  sys.indexes i 
                JOIN sys.index_columns ic ON i.index_id = ic.index_id AND i.object_id = ic.object_id
                JOIN sys.columns c ON ic.column_id = c.column_id AND ic.object_id = c.object_id
                WHERE c.name = @COL
                AND OBJECT_NAME(c.object_id) = @TNAME) IDX 
                    ON IDX.TName = OBJECT_NAME(c.object_id)
            LEFT JOIN sys.triggers trig ON trig.parent_id = c.object_id
            WHERE C.object_id = object_id(N''+ @TNAME +'') AND c.name = @COL
    
        RETURN
    END
    
    

    Para executar a função, basta executar o seguinte script:

    SELECT * FROM getColDef('TABLENAME.COLUMN_NAME')

    Da mesma forma, você pode obter as definições de coluna para uma tabela inteira executando o seguinte script:

    
    DECLARE @TABLENAME VARCHAR(256)
    SET @TABLENAME = 'TABLENAME' -- Put the name of the table here
    
    DECLARE @RESULTS TABLE([Table] varchar(256),[Column] varchar(256),[Type] varchar(64),[Length] int,[IsNullable] varchar(5)
        ,[FK_Name] varchar(256),[Index_Name] varchar(256),[Trigger_Name] varchar(256))
    DECLARE @ROW_NOW INT, @ROW_MAX INT, @COLNAME VARCHAR(256)
    
    SELECT @ROW_NOW = MIN(ROWNUM), @ROW_MAX = MAX(ROWNUM) 
    FROM (SELECT ROW_NUMBER() OVER (ORDER BY name) ROWNUM, name FROM sys.columns WHERE OBJECT_NAME(object_id) = @TABLENAME) SRC
    
    WHILE @ROW_NOW <= @ROW_MAX 
    BEGIN
        SELECT @COLNAME = name FROM 
        (SELECT ROW_NUMBER() OVER (ORDER BY name) ROWNUM, name FROM sys.columns WHERE OBJECT_NAME(object_id) = @TABLENAME) SRC
        WHERE ROWNUM = @ROW_NOW
    
        INSERT INTO @RESULTS
        SELECT * FROM getColDef(@TABLENAME+'.'+@COLNAME)
    
        SET @ROW_NOW = @ROW_NOW + 1
    END
    
    SELECT * FROM @RESULTS ORDER BY [Column]
    
    • 1
  2. avakharia
    2013-01-05T10:21:13+08:002013-01-05T10:21:13+08:00

    Eu gosto do script postado acima, mas o comando que achei muito útil é "Alt + F1", mas em uma tabela.

    Por exemplo, escreva qualquer nome de tabela em uma nova janela de consulta, destaque o nome da tabela e clique em Alt + F1 e exibe a definição da tabela que inclui definições de coluna, bem como índices, onde a tabela está localizada, etc.

    • 0

relate perguntas

  • Melhores práticas para conectar bancos de dados que estão em diferentes regiões geográficas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve