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 / 284822
Accepted
T.S.
T.S.
Asked: 2021-02-06 17:39:58 +0800 CST2021-02-06 17:39:58 +0800 CST 2021-02-06 17:39:58 +0800 CST

Não pode confiar em INFORMATION_SCHEMA.view_definition?

  • 772

Eu construí um aplicativo que compara objetos nos bancos de dados e gera scripts para replicar objetos nos diferentes bancos de dados. O que notei enquanto estava usando isso para recuperar o código de visualização

select * from INFORMATION_SCHEMA.VIEWS where TABLE_NAME = 'V_SC_ALL_CUSTOMER_DOCUMENTS'

é que VIEW_DEFINITIONcorta a visão DDL curta. Então eu aprendi a usar sys.sql_modulespara obter definição completa.

eu corri esses

sp_help 'INFORMATION_SCHEMA.VIEWS'
sp_help 'sys.sql_modules'

e descobri que INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION nvarchartamanho = 8000 e sys.sql_modules.DEFINITION nvarchartamanho = -1. eu acredito nvarchar(max).

Qual é o ponto então ter VIEW_DEFINITIONse você não pode confiar nele? E existem outros tipos de objetos que eu deveria recuperar em sql_modulesvez de suas tabelas correspondentes, como procedimentos, gatilhos, etc?

sql-server ddl
  • 2 2 respostas
  • 160 Views

2 respostas

  • Voted
  1. Best Answer
    J.D.
    2021-02-06T18:39:08+08:002021-02-06T18:39:08+08:00

    Como Erik mencionou no artigo que ele vinculou, INFORMATION_SCHEMAé um esquema obsoleto dos dias clássicos do SQL Server 2000. Você deve ler o artigo que ele vinculou à medida que explica os motivos pelos quais está obsoleto e cita os documentos da Microsoft que suportam esses motivos.

    Em vez disso, você pode usar a seguinte consulta que aproveita a exibição sys.objects para obter a definição de uma exibição:

    SELECT m.[definition] AS ObjectDefinition
    FROM sys.objects o
    INNER JOIN sys.sql_modules m 
        ON m.[object_id] = o.[object_id]
    WHERE o.[object_id] = OBJECT_ID('dbo.YourViewName')
        AND o.[type] = 'V';
    

    Ou a função OBJECT_DEFINITION()para também obter a definição da seguinte forma:

    SELECT OBJECT_DEFINITION(OBJECT_ID(N'dbo.YourView')) AS ObjectDefinition;
    

    Uma ressalva para fazer isso de qualquer maneira é que ele conterá o último script usado para modificar o objeto. Portanto, se a View foi alterada desde sua criação, ela começará com a ALTER VIEWinstrução, caso contrário, ela terá a CREATE VIEWinstrução.

    • 3
  2. Tibor Karaszi
    2021-02-07T08:34:52+08:002021-02-07T08:34:52+08:00

    FWIW, eu trabalhei um pouco nas visualizações do esquema de informações nos dias. Entre outras coisas, criei um diagrama de banco de dados para eles (que provavelmente ainda tenho por aí, em algum lugar).

    Então veio 2005, e percebi como eles estavam fora de fase com o produto. Basta considerar o número de visualizações de catálogo (aproximadamente 280) com quantas visualizações de esquema de informações (21) temos. Além disso, antes de 2005, não tínhamos o conceito de esquema como temos hoje em dia, então, pelo que me lembro, "esquema" nessas visualizações poderia, em algum contexto, ser o nome do banco de dados. E é claro que isso não pode ser alterado devido a motivos de compatibilidade com versões anteriores. (Estou um pouco confuso com os detalhes, isso foi há uns 15 anos, afinal.)

    Para nós que estávamos mais envolvidos nisso naquela época, era bastante óbvio que a MS não gastava muitos recursos nisso, e eu, por um lado, deixei de usá-los como uma batata quente quando 2005 foi lançado.

    É uma boa ideia ter o padrão ANSI/ISO SQL para esse tipo de meta-dado. Mas ele simplesmente não voa na realidade, IMO.

    (O que me surpreendeu agora ao olhar é que encontrei um chamado SEQUENCES. Esse recurso foi introduzido em 2012, então aparentemente algum trabalho é feito para as visualizações info_schema, ainda ...)

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

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

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • 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
    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