Archive for the 'sql server' Category


SQL Types: char, nchar, varchar e nvarchar 0

Um post bem rápido sobre os tipos de dados para texto que temos no SQL Server.

Temos duas variações com ‘n’ e sem o ‘n’. O ‘n’ explicita que os caracteres são armazenados em unicode, o que corresponde a 2 bytes ou 16 bits, enquanto que os sem ‘n’ são armazenados em ASCII 1 byte ou 8bits.

Basicamente, se você criar uma coluna do tipo char ou varchar de tamanho 50, teremos alocado 50 bytes para tais colunas. Entretanto no caso de nvarchar(50) ou nchar(50) teremos alocado 100 como tamanho máximo, uma vez que os tamanhos são definidos em bytes e não em tamanhos absolutos.

No SQL Server 2005, o tamanho máximo para estes campos são de 8000 bytes. Portanto para char e varchar o máximo é 8000, enquanto que para nchar e nvarchar o máximo é 4000 por causa do tipo de codificação usado.

Outro ponto é o uso de MAX para varchar e nvarchar. Poderíamos usar varchar(max) e nvarchar(max), permitindo a eles um valor superior a 8000 bytes, ou 8000 e 4000 caracteres, respectivamente.

As colunas com o parâmetro MAX aceitam até 2^31 bytes, ou 2 Gbytes.

Podemos observar a system view sys.columns e pegar a coluna max_length. Note que para colunas com o atributo MAX o valor é -1, justamente pelo fato de o valor exceder o limite.

Este post foi um pouco diferente do que costumo escrever, é por que nos últimos meses mexi muito com banco de dados. Vou ver se consigo escrever posts menores, com maior regularidade. Até o próximo post.

Como descobrir quais tabelas foram modificadas recentemente 1

Depois de semanas sem postar, vou colocar um post bem breve aqui sobre SQL.

Recentemente precisei descobri quais tabelas foram modificadas recentemente sem ter que ver uma a uma. Se você tivesse poucas tabelas, isso não seria um problema, ver uma-a-uma, digamos umas 15 ou 20 seria até rápido. Mas podemos facilitar um pouco a nossa vida, limitando nossa amostra.

Isto aqui vale para SQL Server, não sei como seria em outras databases (Oracle, Postgree, MySQL e etc).

No SQL Server temos várias Views de sistema, no caso usaremo a View sys.tables, que nos fornece informações diversas sobre as tabelas do banco de dados.

SELECT * FROM sys.tables

Executando um select sobre esta tabela obteremos um resultado semelhante a este:

sys_tables1

A imagem mostra apenas algumas colunas, existem muitas outras, mas vamos nos focar naquelas que precisamo no momento.

Veja que temos os nomes de todas as tabelas, e duas colunas de datas, create_date e modify_date.

A primeira instância, achariamos que teríamos que observer a tabela modify_date e ordenar por ordem decrescente por ela.

SELECT * FROM sys.tables ORDER BY modify_date DESC

Infelizmente, a informação de data de modificação refere-se a inserção de dados, e não sobre sua estrutura.

sys_tables2

A coluna que temos que ver é create_date. Na figura não é possível observar isso, mas a data contida em create_date refere-se a última modificação estrutural realizada sobre ela.

Então bastaríamos fazer:

SELECT * FROM sys.tables ORDER BY create_date DESC

Eu sei que este post não é muito informativo, é mais uma dica.

Abraços e até o próximo post.

JDBC e SQLEXPRESS 2005 0

Comecei a usar o eclipse para trabalhar com java. Você começa fazendo aqueles programas básicos para conhecer o ambiente em que vai trabalhar. Ai chega na parte que toda aplicação usa, banco de dados.

Primeiro é necessário baixar o driver jdbc para SQL Server que pode ser encontrado na aqui.

Neste caso estou trabalhando com o SQL Server Express Edition 2005 que já estava instalado por ter usado o Visual Studio 2005 anteriormente.

No management studio tudo ok. Mas na hora de configurar um Data Source no eclipse… SEM RESPOSTA!

Um dos problemas básicos é que o SQL Express 2005 pode estar autenticando apenas através do Windows Authentication, que é o seu login no windows.

O que temos que fazer é habilitar o modo hibrido, de modo que seja aceito autenticação por SQL Server.

Vamos usar o Microsoft SQL Server Management Studio Express para gerenciar. Conecte ao servidor usando a sua conta do windows para autenticar.

Uma vez conectado clique com o botão direito sobre o servidor e em propriedades. Será aberta a janela Server Properties, vá no item Security e marque a opcao Server Authentication > SQL Server and Windows Authentication. Clique em OK.

Antes de reiniciarmos o serviço teremos que adicionar uma conta SQL Server. Existe a conta sa por default mas é recomendável criar outra.

Na árvore do servidor, clique em Security > Logins > New Login… Cadastre uma nova conta SQL Server. Salve e agora reinicie a aplicação.

Entretanto isso não é o suficiente para usarmos o SQL Server Express 2005, por que ele não está habilitado para conexões TCP/IP que é o que usaremos no JDBC. Para habilitarmos usaremos o SQL Server Configuration Manager que se encontra em: Start > All Programs > Microsoft Server 2005 > Configuration Tools > SQL Server Configuration Manager.

Selecione SQL Server 2005 Network Configuration > Protocols for SQLEXPRESS > TCP/IP > Properties. Na aba Protocol marque enable = yes e na aba IP Addresses coloque o que tiver IP 127.0.0.1 com:

  • active e enable: Yes
  • TCP Dynamic Ports: 0
  • TCP Port: 1433

Se você vai trabalhar apenas na sua máquina sem que outra pessoa utilize, use apenas o IP 2, e mantenha o IP1 desabilitado. O que ele representa é que ele habilitará a sua interface de rede para conexões com o servidor.

Uma vez finalizado reinicie o serviço.

Para configurar o JDBC agora basta usar a url jdbc:sqlserver://localhost\SQLEXPRESS e o usuário e senha que você criou.

Pronto, agora você já pode usar o SQL Server.