Mostrando postagens com marcador MSSQL. Mostrar todas as postagens
Mostrando postagens com marcador MSSQL. Mostrar todas as postagens

quinta-feira, 10 de dezembro de 2009

Obtendo os dados de uma tabela no MSSQL (nome e atributos dos campos)

 Em alguns casos é extremamente útil obter os nomes dos campos de uma tabela bem como informações destes campos (tipo, tamanho, se é obrigatório). Considerando estas 4 informações as mais relevantes, posto abaixo um comando do M$SQL para listar tais informações de uma determinada tabela.

----------------------------------------------------------------------------------------------------------------
Listar os campos de uma tabela

basta substituir "nome_da_tabela" pelo nome da Tabela ou View que você queira listar os campos

declare @nometabela VARCHAR(100); SELECT @nometabela = 'nome_da_tabela'
/*Não alterar linhas abaixo*/
SELECT COLUNAS.NAME AS Atributo, TIPOS.NAME AS Tipo,
       COLUNAS.LENGTH AS Tamanho, COLUNAS.ISNULLABLE AS Pode_nulo
FROM SYSOBJECTS AS TABELAS
     INNER JOIN SYSCOLUMNS AS COLUNAS ON (TABELAS.ID = COLUNAS.ID)
     INNER JOIN SYSTYPES   AS TIPOS  ON (COLUNAS.USERTYPE = TIPOS.USERTYPE)
WHERE TABELAS.NAME = @nometabela

Palavras-chave para facilitar busca no google: sql mssql lista campos tabela

Exportar e importar uma consulta em SQL Server para arquivo CSV

Em alguns casos torna-se extremamente necessário exportar o resultado de uma consulta para um arquivo csv, para posterior importação em aplicativos de planilha eletrônica, como o excel por exemplo. Aqui vão os comandos para o caminho de ida (Gerar o CSV a partir de uma consulta sql) e o caminho de volta(que nem é tão volta assim), onde você poderá preencher uma tabela obtendo os dados de um arquivo CSV.

 Exportar uma consulta para arquivo CSV
Obs: Substitua, convenientemente, o nome do arquivo csv, o nome do banco de dados, o nome da tabela e os campos que se quer exportar para o arquivo csv.


declare @sql varchar(8000); select @sql = 'select * from nome_banco_de_dados.dbo.nome_tabela'
declare @filename varchar(255); select @filename = 'c:\nome_do_arquivo.csv'
/*Não alterar linhas abaixo*/
declare @cmd varchar(8000); select @cmd = 'bcp "'+@sql+'" queryout '+@filename+' -c -t; -T '
exec master..xp_cmdshell @cmd
------------------------------------------------------------------------------------------------------------------------------------------------
Importar um arquivo CSV para uma tabela
Obs: Substitua, convenientemente, o nome do arquivo csv, o nome do banco de dados, e o nome da tabela que se quer popular com os dados do arquivo csv.
Obs2: A tabela e o banco de dados já devem existir previamente antes de usar os comandos abaixo.


BULK INSERT nome_banco_de_dados.dbo.nome_tabela
FROM 'c:\nome_do_arquivo.csv'
WITH( FIELDTERMINATOR = ';', ROWTERMINATOR = '\n')
------------------------------------------------------------------------------------------------------------------------------------------------

Espero que seja útil... Já me ajudou muito.

quarta-feira, 9 de dezembro de 2009

PHP com SQL Server 2008

Olá!

Um problema que tive recentemente foi atualizar a versão do PHP e do M$ Sql ao mesmo tempo... O clássico problema dos afoitos... Em vez de atualizar um, ver se tudo funciona e depois atualizar o outro... imperou, como sempre, o "Time is money" e "vamos que vamos"...

Bom... Como era de se esperar, nada mais funcionou... Minhas aplicações não conseguiram mais acessar o banco de dados, etc. e tal.
Pesquisando diversos fóruns percebi que esta solução não é nada fácil de se encontrar... Isto quando os fóruns chegam a ela. Aqui vai o que resolveu o meu problema e espero que resolva o teu.

Uma solução rápida, que parece ter funcionado com muitas pessoas mas não funcionou comigo (soluções simples costumam ter o efeito "lei de Murph" comigo) é o de simplesmente atualizar a dll ntwdblib.dll do teu php. Para tal, basta você baixar a versão 200.80.194.0 do arquivo ntwdblib.dll (clique aqui para tal) e substituir pela que está na tua pasta do PHP (recomendo fortemente fazer backup da tua versão antiga antes desta operação).

Se você consegue se virar bem com os "How to's" da Microsoft, acesse a URL abaixo e boa sorte.
http://www.microsoft.com/downloads/details.aspx?FamilyID=ccdf728b-1ea0-48a8-a84a-5052214caad9&displaylang=en#Instructions

Caso contrário, vou tentar mastigar a solução abaixo.


*)Os passos abaixos devem ser executados na máquina onde o php é executado, isto é, no teu web server.

*)A solução está disponível para os seguintes sistemas operacionais:
  • Windows Server 2003 Service Pack 1
  • Windows XP Service Pack 3
  • Windows Vista
  • Windows Server 2008
  • Windows 7

*)Você precisará baixar o driver do PHP para SQL Server. Faça-o pela URL abaixo:
http://www.microsoft.com/downloads/details.aspx?FamilyID=ccdf728b-1ea0-48a8-a84a-5052214caad9&displaylang=en
ou pela URL abaixo caso a acima não funcione:
http://msdn.microsoft.com/en-us/data/cc299381.aspx

*)Baixe e instale o SQL Native Client de acordo com o teu processador:
Download the X86 package
Download the X64 package
Download the IA64 package
Para tal, acesse a URL abaixo e clique em uma das opções acima listadas.
http://msdn.microsoft.com/en-us/library/cc296170%28SQL.90%29.aspx

*)Após baixar o arquivo SQLServerDriverForPHP11.EXE, execute-o. Será perguntado o local onde os arquivos deverão ser descompactados. Escolha c:\ ou um de sua preferência.
Ao ser descompactado, os seguintes arquivos dll estarão disponíveis:

Arquivo de driver
Versão do PHP
É thread safe?
Usar com este dll
php_sqlsrv_53_nts_vc6.dll
5.3
Não
php5.dll
php_sqlsrv_53_nts_vc9.dll
5.3
Não
php5.dll
php_sqlsrv_53_ts_vc6.dll
5.3
Sim
php5ts.dll
php_sqlsrv_53_ts_vc9.dll
5.3
Sim
php5ts.dll
php_sqlsrv_52_nts_vc6.dll
5.2
Não
php5.dll
php_sqlsrv_52_ts_vc6.dll
5.2
Sim
php5ts.dll

A terminação "ts" indica "thread safe";

A terminação "vc6" arquivo a ser usado se o teu PHP foi compilado pelo Visual C++ 6.0;

A terminação "vc9" arquivo a ser usado se o teu PHP foi compilado pelo Visual C++ 9.0;


*)Mova todos os dll's acima para a pasta de extensões do PHP. Em geral esta pasta tem o nome "ext" e fica dentro da pasta onde ficam os arquivos do PHP. Na minha máquina, por exemplo, fica em c:\xampp\php\ext.

*)Altere o arquivo php.ini, acrescentando a linha abaixo:
extension=<nome_do_arquivo_dll>
substituindo <nome_do_arquivo_dll> pelo nome do arquivo dll conforme tabela acima.
Exemplo: Se o teu PHP foi compilado pelo Visual C++ 6.0 e você deseja usar o driver thread-safe, a linha acrescentada no php.ini deve ser a seguinte:
extension=php_sqlsrv_53_ts_vc6.dll
Obs1: Para saber qual a versão do Visual C++ com a qual o teu PHP está compilado, execute o phpinfo().
Obs2: Acrescentar o extension acima provavelmente significa dizer que você não quer mais usar o driver antigo. Recomendo comentar a linha que carrega o driver antigo (no meu php.ini é a linha "extension=php_mssql.dll").

*)Reinicialize o teu servidor WEB
Obs: Existe uma outra forma de carregar esta extensão sem a necessidade de alterar o arquivp php.ini(e, conseqüentemente, sem a necessidade de reiniciar o servidor web). Para isto, utilize o comando dl no teu script php, conforme exemplo abaixo:
dl('<nome_do_arquivo_dll>');
Veja a documentação do comando dl aqui.


***)Se depois deste árduo trabalho ainda não estiver funcionando, tenho algumas dicas:
  1)Você está usando ADODB? Se sim, certifique-se de estar utilizando a última versão. Baixe a última 
versão aqui.
  2)Na conexão você está usando NewADOConnection("mssql");? Se sim, mude para NewADOConnection("mssqlnative");


Acho que é isso aí.
Quaisquer dúvidas dêem uma consultada em
http://msdn.microsoft.com/en-us/library/cc296173%28SQL.90%29.aspx
que foi a maior fonte de ajuda que tive para resolver o problema e, posteriormente, postar este "tutorial".

Mensagens relacionadas (viabiliza este texto ser encontrado pelo google):
"Unable to connect to server:"