none
Criar pasta pelo TRANSACT SQL RRS feed

  • Pergunta

  • Existe alguma maneira de criar pasta por comando do TRANSACT SQL?

    se existir, me fala como posso fazer isso.

    ja rodei o google e nao acho NADA.


    quarta-feira, 23 de julho de 2008 17:36

Respostas

  • criar direto nao conheco mais vc. pode usar a xp_cmdshell para executar um md por exemplo

     

    exec master..xp_cmsshell 'md c:\pasta_nova'

     

    obs. o c: e o caminho dentro do seu servidor para acesso a outros servidores / locias passar o unc name. e o usuario que sobe os servicos do sql precisa de dereitos para isso.

     

     

    Abs;

     

     

    quarta-feira, 23 de julho de 2008 17:54

Todas as Respostas

  • criar direto nao conheco mais vc. pode usar a xp_cmdshell para executar um md por exemplo

     

    exec master..xp_cmsshell 'md c:\pasta_nova'

     

    obs. o c: e o caminho dentro do seu servidor para acesso a outros servidores / locias passar o unc name. e o usuario que sobe os servicos do sql precisa de dereitos para isso.

     

     

    Abs;

     

     

    quarta-feira, 23 de julho de 2008 17:54
  • Ae Marcelo;

    Vou testar essa solução, mas antes tenho mais uma pergunta importante. tenho como ver se a pasta existe antes de cria-la?

    desde já agradeço a colaboração
    quarta-feira, 23 de julho de 2008 18:01
  • NLopes,

     

    Conforme o Marcelo Colla postou, utilize o xp_cmdshell, disponível tanto no SQL Server 2000 como no 2005.

    quarta-feira, 23 de julho de 2008 18:02
  • nem precisa testar se existe tente criar e manipule o output da xp_cmdhsell

     

     

    Abs;

     

    quarta-feira, 23 de julho de 2008 18:03
  • Boa Tarde,

     

    De fato a XP_CMDSHELL é capaz de fazer isso assim como o CLR. No entanto, vale a pena lembrar que ela abre brechas de segurança. Da mesma forma que a xp_cmdshell abre a possibilidade de digitar um comando md para criar uma pasta, ela também abre a possibilidade de digitar um comando del ou format. Não recomendaria que você a utilizasse sobre nenhuma circustância (a menos que só você manipule).

     

    As coisas começam pequenas e apenas uma aplicação cria pastas. Com o tempo, a solução se espalha para todos os projetos e nunca mais você terá controle sobre sobre essa procedure. Banco de dados não é pra criar pastas. Você deve procurar uma outra solução se possível.

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 23 de julho de 2008 18:26
  • Apesar de ser possível utilizar o XP_CMDSHELL é também possível utilizar o CLR. Vc talvez possa criar uma DLL .Net e acioná-la via T-SQL. Acredito que chegue ao resultado esperado.

    Porém sou da mesma opinião do Gustavo.

    "Banco de dados não deve ser utilizado para criação de pastas. Você deve procurar uma outra solução se possível".

     

    [ ]s.

    quarta-feira, 23 de julho de 2008 19:03
  • nlopes,

     

    Você pode verificar a existência de pastas e/ou arquivos utilizando a master..xp_fileexist e pegando o valor da coluna "File is a Directory". O problema é que você terá que criar uma temporária para guardar o retorno disto. Nem no SQL 2005, pois você não consegue inserir numa table variable, valores da execução de uma stored procedure.

     

    Code Snippet


    exec
    master..xp_fileexist 'c:\winnt'

    --// results

    File Exists File is a Directory Parent Directory Exists

    ----------- ------------------- -----------------------

    0 1 1

    (1 row(s) affected)

     

    exec master..xp_fileexist 'c:\xxxxxxxx'

    --// results

    File Exists File is a Directory Parent Directory Exists

    ----------- ------------------- -----------------------

    0 0 1

    (1 row(s) affected)

     

     

    Um abraço,

    Raul Santos

     

    quarta-feira, 23 de julho de 2008 21:43

  • Caros colaboradores;

    Consegui criar a pasta na minha maquina local, mas ainda estou tendo problemas para criar a pasta em uma outra maquina.

    tentei como foi postado pelo Marcelo:

    obs. o c: e o caminho dentro do seu servidor para acesso a outros servidores / locias passar o unc name. e o usuario que sobe os servicos do sql precisa de dereitos para isso.

    Mas não entendi direito e nao consegui realizar tal operação.

    Dei todas as permissões na pasta onde quero criar as SUBpastas na maquina de destino e ainda nada.

    Esta dando Permissao Negada

    alguem pode ajudar?
    quinta-feira, 24 de julho de 2008 14:24
  • NLopes,

     

    Não tenho certeza, mas você deverá declarar o caminho completo(unc) para poder criar no local desejado.

     

    Por exemplo: \\nomedoservidor\nomepasta

     

    Deixa eu ver se entendi, você quer através do SQL Server, abrir uma sessão com o xp_cmdshell para criar a pasta em outro servidor?

    quinta-feira, 24 de julho de 2008 16:38
  • Vou explicar toda a operação

    tenho um script que gera mais de 100 arquivos txt.

    Estou querendo fazer com que esses arquivos sejam salvos em uma outra maquina, e para ficar mais organizado, pensei em criar uma pasta para cada arquivo gerado.

    Já esta funcionando o gerador de txt e ja conseguir criar as pastas na maquina LOCAL, mas nao estou conseguindo quando tento fazer essa operação em outra maquina.

    Esta dando a mensagem: Access is denied.


     
    quinta-feira, 24 de julho de 2008 17:16