Published on

December 17, 2014

Explorando as Visualizações e Funções do SQL Server

Neste artigo, vamos explorar o mundo das visualizações, tabelas e funções do SQL Server. Essas ferramentas poderosas fornecem informações internas sobre um banco de dados e podem ajudar a resolver perguntas e problemas comuns. Vamos explorar algumas das perguntas mais frequentes e suas soluções usando esses objetos do sistema.

Como posso obter a lista de tabelas em um banco de dados?

Para recuperar a lista de tabelas em um banco de dados, você pode usar a visualização INFORMATION_SCHEMA.TABLES ou a visualização sysobjects. Aqui estão duas opções:

Opção 1:

SELECT * FROM INFORMATION_SCHEMA.TABLES

Opção 2:

SELECT * FROM sysobjects WHERE xtype = 'U'

A visualização INFORMATION_SCHEMA.TABLES é recomendada, pois fornece uma estrutura consistente que é menos propensa a mudanças em versões futuras do SQL Server. A visualização sysobjects contém informações valiosas sobre vários objetos de banco de dados, incluindo tabelas.

Como posso obter a lista de visualizações em um banco de dados?

Assim como recuperar a lista de tabelas, você pode usar a visualização INFORMATION_SCHEMA.VIEWS ou a visualização sysobjects para obter a lista de visualizações em um banco de dados. Aqui estão duas opções:

Opção 1:

SELECT * FROM INFORMATION_SCHEMA.VIEWS

Opção 2:

SELECT * FROM sysobjects WHERE xtype = 'V'

A visualização INFORMATION_SCHEMA.VIEWS fornece informações específicas sobre visualizações, enquanto a visualização sysobjects contém informações sobre vários objetos de banco de dados, incluindo visualizações.

Como posso obter a lista de procedimentos em um banco de dados?

Para recuperar a lista de procedimentos em um banco de dados, você pode usar a visualização INFORMATION_SCHEMA.ROUTINES ou a visualização sysobjects. Aqui estão duas opções:

Opção 1:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_type = 'PROCEDURE'

Opção 2:

SELECT * FROM sysobjects WHERE xtype = 'P'

A visualização INFORMATION_SCHEMA.ROUTINES contém especificamente informações sobre procedimentos armazenados e funções, enquanto a visualização sysobjects fornece informações sobre vários objetos de banco de dados, incluindo procedimentos.

Como posso obter a data de criação de uma tabela específica?

Para recuperar a data de criação de uma tabela específica, você pode usar a visualização sysobjects. Aqui está um exemplo:

SELECT crdate FROM sysobjects WHERE xtype = 'U' AND name = 'NomeDaSuaTabela'

A coluna crdate representa a data de criação, e a visualização sysobjects contém informações sobre tabelas, visualizações, procedimentos armazenados e funções.

Como posso obter a lista de todas as tabelas em todos os bancos de dados?

O procedimento armazenado sp_MSforeachdb é uma ferramenta útil para trabalhar com todos os bancos de dados. Embora não seja oficialmente documentado, ele pode ser usado para executar uma consulta em cada banco de dados. Aqui está um exemplo:

DECLARE @cmd VARCHAR(8000)
SELECT @cmd = 'USE ? SELECT ''?'', name FROM sysobjects WHERE xtype = ''U'''
EXEC sp_MSforeachdb @cmd

Neste exemplo, o ? representa o nome do banco de dados, e a consulta exibirá o resultado para cada banco de dados.

Como posso pesquisar uma tabela em todos os bancos de dados?

Se você precisa pesquisar uma tabela em vários bancos de dados, pode usar o procedimento armazenado sp_MSforeachdb juntamente com a visualização sysobjects. Aqui está um exemplo:

DECLARE @cmd VARCHAR(8000)
SELECT @cmd = 'USE ? SELECT ''?'', name FROM sysobjects WHERE xtype = ''U'' AND name = ''NomeDaSuaTabela'''
EXEC sp_MSforeachdb @cmd

Neste exemplo, substitua NomeDaSuaTabela pelo nome da tabela que você está procurando. A consulta exibirá o(s) banco(s) de dados e a tabela, se ela existir.

Como posso obter a lista de nomes de procedimentos armazenados e seu código?

Para recuperar os nomes e o código dos procedimentos armazenados, você pode usar as visualizações sysobjects e syscomments. Aqui está um exemplo:

SELECT name, [text] FROM sysobjects o INNER JOIN syscomments c ON o.id = c.id WHERE xtype = 'P'

A visualização sysobjects contém os nomes dos procedimentos armazenados, e a visualização syscomments contém o código. Essa consulta é particularmente útil para pesquisar palavras ou frases específicas em vários procedimentos armazenados simultaneamente.

Como posso obter a data de criação de um usuário específico do banco de dados?

Para recuperar a data de criação de um usuário específico do banco de dados, você pode usar a visualização sys.sysusers. Aqui está um exemplo:

SELECT createdate FROM sys.sysusers WHERE name = 'NomeDoSeuUsuario'

Substitua NomeDoSeuUsuario pelo nome do usuário que você está interessado. A visualização sys.sysusers contém informações úteis relacionadas aos usuários em um banco de dados.

Como posso obter a data de criação de um login específico do SQL Server?

Para recuperar a data de criação de um login específico do SQL Server, você pode usar a visualização sys.syslogins. Aqui está um exemplo:

SELECT * FROM sys.syslogins WHERE name = 'NomeDoSeuLogin'

Substitua NomeDoSeuLogin pelo nome do login para o qual você deseja recuperar informações. A visualização sys.syslogins contém informações sobre logins do SQL Server.

Como posso obter o login e o usuário mapeado em todos os bancos de dados?

Para recuperar informações sobre o login e o usuário mapeado a ele em todos os bancos de dados, você pode usar as visualizações sys.database_principals e sys.server_principals. Aqui está um exemplo:

DECLARE @cmd VARCHAR(8000)
SELECT @cmd = 'SELECT ''?'', login_name = sp.name, user_name = dp.name FROM ?.sys.database_principals AS dp INNER JOIN sys.server_principals AS sp ON dp.[sid] = sp.[sid]'
EXEC sp_MSforeachdb @cmd

Essa consulta exibirá o nome do banco de dados, o nome do login e o nome do usuário para cada banco de dados.

Como posso detectar a fragmentação de uma tabela específica?

Para detectar a fragmentação em uma tabela, você pode usar a função sys.dm_db_index_physical_stats. A coluna avg_fragmentation_in_percent indica o nível de fragmentação. Aqui está um exemplo:

DECLARE @db_id SMALLINT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'NomeDoSeuBancoDeDados');
SET @object_id = OBJECT_ID(N'NomeDaSuaTabela');
SELECT avg_fragmentation_in_percent FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL, 'LIMITED');

Substitua NomeDoSeuBancoDeDados pelo nome do seu banco de dados e NomeDaSuaTabela pelo nome da tabela que você deseja verificar. Se a porcentagem de fragmentação for superior a 30%, é recomendável reconstruir o índice. Se for menor, você pode reorganizar o índice.

Como posso obter informações sobre as sessões do SQL Server?

A visualização sys.dm_exec_sessions fornece informações valiosas sobre as sessões do SQL Server, incluindo hora de início, hora de término, nome de login, domínio NT e programa usado. Aqui está um exemplo:

SELECT * FROM sys.dm_exec_sessions

Essa visualização pode ser útil para monitorar e analisar informações relacionadas às sessões.

Como posso obter informações sobre a data de criação de um backup?

Para recuperar informações sobre a data de criação de um backup de banco de dados, você pode consultar a tabela backupset no banco de dados msdb. Aqui está um exemplo:

SELECT [backup_start_date], [backup_finish_date] FROM [msdb].[dbo].[backupset]

Essa consulta exibirá as datas de início e término dos backups.

Como posso obter informações sobre o tamanho e a localização de um backup?

Para recuperar informações sobre o tamanho e a localização de um arquivo de backup, você pode consultar a tabela do sistema backupfile no banco de dados msdb. Aqui está um exemplo:

SELECT [file_size] / 1024 / 1024 as Tamanho_em_MB, [physical_name] FROM [msdb].[dbo].[backupfile]

Essa consulta exibirá o tamanho dos backups em megabytes e o caminho onde eles estão localizados. O file_size é armazenado em bytes, portanto, é necessário convertê-lo para megabytes.

Como posso obter informações sobre a data de criação e a data de modificação de um Job do SQL Server?

Para recuperar informações sobre a data de criação e a data de modificação de um Job do SQL Server, você pode consultar a tabela sysjobs no banco de dados msdb. Aqui está um exemplo:

SELECT [date_created], [date_modified] FROM [msdb].[dbo].[sysjobs]

Essas informações também podem ser obtidas usando o procedimento armazenado sp_help_job.

Conclusão

As visualizações, tabelas e funções do sistema no SQL Server fornecem informações valiosas sobre o banco de dados, permitindo-nos monitorar, rastrear alterações e medir o desempenho. Ao aproveitar essas ferramentas poderosas, podemos resolver perguntas comuns e lidar eficientemente com problemas do mundo real.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.