Usuário com melhor resposta
Pegar numero de serie do volume sql

Pergunta
-
No C# consigo pegar assim
String drive = "C"; ManagementObject objDisco = new ManagementObject(@"win32_logicaldisk.deviceid=""" + drive + @":"""); objDisco.Get(); string hdVolumeID = objDisco["VolumeSerialNumber"].ToString();
Quero receber o numero de serie do volume dentro do SQL, qual comando utilizo ?
Atenciosamente,
José Henrique Sabino
Respostas
-
Olá José,
Pode ser que a sua execução está retornando as linhas em uma sequencia diferente da minha.
Execute apenas:
EXEC xp_cmdshell 'vol'
E veja que uma das linhas retornará o número de série do seu volume. A partir daí você pode modificar este código para fazer o tratamento:
DECLARE @Temp TABLE ( [output] NVARCHAR(200) ) INSERT INTO @Temp ([output]) EXEC xp_cmdshell 'vol' SELECT REPLACE([output], ' Volume Serial Number is ', '') as [idVolume] FROM ( SELECT ROW_NUMBER() OVER (ORDER BY [output] ASC) AS rownumber, [output] FROM @Temp ) AS T WHERE rownumber = 3 /* mude este número para pegar linhas diferentes do retorno */
Att,
- Marcado como Resposta Xarp2 segunda-feira, 21 de novembro de 2016 12:11
Todas as Respostas
-
Olá José,
Veja se isso te ajuda: Na query abaixo verifique a columa volume_id
SELECT f.database_id, f.file_id, volume_mount_point, total_bytes, available_bytes , * FROM sys.master_files AS f CROSS APPLY sys.dm_os_volume_stats(f.database_id, f.file_id);
fonte: https://msdn.microsoft.com/en-us/library/hh223223.aspx?f=255&MSPPError=-2147217396
Att,
- Editado Sergio Marchetti sexta-feira, 18 de novembro de 2016 16:37
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 19 de novembro de 2016 12:43
- Não Sugerido como Resposta Xarp2 segunda-feira, 21 de novembro de 2016 11:19
-
-
Olá José,
Tem essa segunda opção:
DECLARE @Temp TABLE ( [output] NVARCHAR(200) ) INSERT INTO @Temp ([output]) EXEC xp_cmdshell 'vol' SELECT REPLACE([output], ' Volume Serial Number is ', '') as [idVolume] FROM ( SELECT ROW_NUMBER() OVER (ORDER BY [output] ASC) AS rownumber, [output] FROM @Temp ) AS T WHERE rownumber = 3
Uma das linhas de retorno contém o id do volume, porém você vai precisar tratar este retorno.
Fiz um tratamento bem simples neste exemplo, mas é bom ficar atento, pois pode ser que nem sempre você encontre o mesmo retorno dependendo do ambiente que você está executando o comando.
Att,
- Editado Sergio Marchetti sexta-feira, 18 de novembro de 2016 19:24 Código mais completo
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 19 de novembro de 2016 12:43
- Não Sugerido como Resposta Xarp2 segunda-feira, 21 de novembro de 2016 11:19
- Marcado como Resposta Xarp2 segunda-feira, 21 de novembro de 2016 12:11
- Não Marcado como Resposta Xarp2 segunda-feira, 21 de novembro de 2016 12:11
-
-
Olá José,
Pode ser que a sua execução está retornando as linhas em uma sequencia diferente da minha.
Execute apenas:
EXEC xp_cmdshell 'vol'
E veja que uma das linhas retornará o número de série do seu volume. A partir daí você pode modificar este código para fazer o tratamento:
DECLARE @Temp TABLE ( [output] NVARCHAR(200) ) INSERT INTO @Temp ([output]) EXEC xp_cmdshell 'vol' SELECT REPLACE([output], ' Volume Serial Number is ', '') as [idVolume] FROM ( SELECT ROW_NUMBER() OVER (ORDER BY [output] ASC) AS rownumber, [output] FROM @Temp ) AS T WHERE rownumber = 3 /* mude este número para pegar linhas diferentes do retorno */
Att,
- Marcado como Resposta Xarp2 segunda-feira, 21 de novembro de 2016 12:11