Eu gosto sp_helpdb
, isso me dá a chance de ter uma visão geral.
Encontrei um blog que mostra como editá-lo facilmente .
BTW, gostaria de ordenar os resultados por data de criação. Para fazer isso, tenho que CONVERTER a coluna "criada" de Apr 7 2017
para 2017-04-07 00:00:00
.
Então eu insiro sp_helpdb
em uma tabela temporária mas minha conversão ( CONVERT(VARCHAR(10),created,120)
) não está funcionando:
CREATE TABLE #db_details (name nvarchar(128), db_size nvarchar(50),owner nvarchar(128),db_id int,created varchar(128),status nvarchar(2000),compatibility_level int)
INSERT INTO #db_details EXEC sp_helpdb
SELECT *
FROM #db_details
ORDER BY CONVERT(VARCHAR(10),created,120) asc
DROP TABLE #db_details
Estou seguindo um guia que é tão fácil! Onde estou errado?
(1) Você está convertendo algo que já é uma string na mesma string. O número do estilo é completamente irrelevante neste caso; que é usado se você estiver convertendo uma string em uma data/hora ou vice-versa.
(2) A inserção com an
ORDER BY
não tem sentido, pois essa ordenação não é lembrada quando outras consultas consultam posteriormente essa tabela. Você precisa daORDER BY
consulta externa se sua intenção for retornar resultados ao cliente nessa ordem. Tente alterar a consulta no procedimento armazenado para o seguinte (e pare de mover essa saída entre mais e mais #temp tabelas):Observe que essa conversão não funcionará se a sessão que preenche a tabela #temp estiver sendo executada em determinados idiomas quando eles forem diferentes do idioma do servidor. Por exemplo, em uma instância em inglês dos EUA, se você executar isso primeiro:
A tabela temporária será preenchida com datas em inglês, como:
Mas o francês não sabe o que é "Apr", então
CONVERT
o seguinte erro:No SQL Server 2012 e superior (por favor, sempre marque com a versão que você está usando), você pode usar
TRY_CONVERT()
em vez disso, por segurança. Isso eliminará o erro, mas significa que os dados não serão ordenados para sessões com configurações de idioma incompatíveis.Encontrei uma solução: