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.