none
Pegar numero de serie do volume sql RRS feed

  • 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

    sexta-feira, 18 de novembro de 2016 16:30

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
    segunda-feira, 21 de novembro de 2016 11:39

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
    sexta-feira, 18 de novembro de 2016 16:36
  • Não deu certo, o numero do volume que quero pegar contem 8 dígitos 

    Atenciosamente,
    José Henrique Sabino

    sexta-feira, 18 de novembro de 2016 19:04
  • 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
    sexta-feira, 18 de novembro de 2016 19:14
  • testei em 2 maquinas apareceu o seguinte

     O volume na unidade C não tem nome.


    Atenciosamente,
    José Henrique Sabino

    segunda-feira, 21 de novembro de 2016 11:19
  • 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
    segunda-feira, 21 de novembro de 2016 11:39