CREATE TABLE

Short Scripts – Setembro 2017

Muito boa tarde!!! Olá galera…. Após mais um sábado de aulas na Fatec São Roque, chegou a hora de se dedicar a comunidade de tecnologia, mais especificamente aos amantes de bancos de dados. Como promessa é dívida e deve ser … Continuar lendo

Short Scripts – Outubro 2016

Muito bom dia!! Olá comunidade, estou retornando com um pouco de atraso, mas não se esquecendo das responsabilidades, caso você não tenha entendido estou me referindo ao atraso em publicar mais um post dedicado a sessão Short Scripts que deveria ter ocorrido no mês de setembro. No decorrer de 2016 fui realizando algumas mudanças nas … Continue Lendo "Short Scripts – Outubro 2016"

FeedBack Microsoft Connect: Resolvido como NÃO será corrigido

Olá Pessoal, Ano passado fiz um post registrando um Bug que acontece até a versão 2008 R2 do SQL Server, quando se cria uma tabela com dois campos calculados com o mesmo nome, conforme pode ser visto abaixo: create table Bug_SQL2008R2( Cod int, Bug as cod+cod, Bug as cod+cod ) Post Completo: Casos do Dia [...]

Criando tabelas temporárias no SQL Server (Parte 1)

Olá pessoal, 

     Estava pesquisando algumas coisas relacionadas a OPENROWSET e me deparei com alguns artigos falando sobre tabelas temporárias, achei bacana, porque eu mesmo não sabia muito a respeito, com isso fiquei motivado a estudar o assunto e fazer um artigo "HowTo".

Seguinte, todo mundo (que entende um pouco de SQL) sabe que para criar uma tabela num banco de dados é necessário fazer da seguinte forma (bem simples no SQL Server):

Create table nome_da_tabela (
   campoID int ,
   campoString varchar(50),
   campoDate date
)


ou 

Select  campoID , campoString , campoDate  into [nova_tabela] from [nome_da_tabela]

(neste caso foi criada uma tabela a partir de uma outra existente no banco já populada)

     Porém temos a seguinte situação: supondo que já se tenha um banco estruturado e populado com dados,    banco este que não pode ficar sendo alterado a todo momento, então em determinadas ocasiões há a necessidade de se criar uma tabela para armazenar determinados dados que serão processados e gravados no próprio banco ou apenas exibidos para o usuário. Para isso tem-se o recurso de criar tabelas temporárias que atenderão a essa finalidade.

Tem-se então os tipos de tabelas temporárias identificadas por:
#nome_da_tabela (local)
##nome_da_tabela (global)
@nome_da_tabela

Então qual usar? Para tal pergunta é bom saber qual a utilidade de cada uma.

#nome_da_tabela: 
Este caso é o mais comum de se ver em um script SQL, é uma tabela temporária local, como assim local? porque ela só pode ser enxergada pela instrução SQL dentro da transação aberta.
Este tipo de tabela temporária é criada dentro do banco tempdb do SQL Server.

Exemplo:

--criação da tabela temporária
Create table #nome_da_tabela (
   campoID int ,
   campoString varchar(50),
  campoDate date
)


ou dando um Select com a opção <into> em uma tabela qualquer de um banco de dados, neste exemplo foi usado o banco AdventureWorks da Microsoft.


ou dando um Select com a opção <into> em uma tabela qualquer de um banco de dados e ainda definindo os tipos.


para vermos as suas propriedades depois de criada, executamos a stored procedure do SQL Server, sp_help:
exec tempdb..sp_help #nome_da_tabela


onde:
exec: executa a stored procedure;
Tempdb: é um dos bancos de dados do sistema no SQL Server;
sp_help: é a stored procedure que vai ser executada;
#nome_da_tabela: já diz tudo, é a tabela que será exibida as informações.

Bom, a partir do momento em que a tabela está criada, a mesma já pode ser populada normalmente como qualquer outra tabela do banco de dados, a mesma ainda pode receber índices.
Quando a transação atual for fechada, a mesma desaparecerá.

Tabelas temporárias trabalham bem com grandes quantidades de dados, já para poucas informações, o aconselhável é trabalhar com tabelas de variáveis, tabelas essas que serão vistas no próximo artigo.

Dando um Select na tabela temporária (os dados são originários da tabela Person.Contact do banco de dados AdventureWorks).


Caso queira acabar com a mesma antes de fechar a conexão basta dar um Drop como é feita para deletar qualquer outra tabela.

Como disse no inicio do artigo, essa tabela só será enxergada dentro da conexão atual, se outro usuário se conectar ao banco e tentar acessar a tabela, o mesmo não vai conseguir, pois a mesma está de forma local na conexão aberta.


Para que outro usuário possa ter acesso à tabela, a mesma deve ser criada de forma global, isso é feito colocando-se outra "#" (tralha) na frente da mesma, então a tabela vai ficar da seguinte forma: ##nome_tabela.


Agora é possível fazer o select por meio de outra transação.


De forma bem simples, essa foi a explicação de como se criar uma tabela temporária, até a próxima parte do artigo, onde será abordado a criação de tabelas do tipo variável.





Referências:

Casos do Dia a Dia – CREATE TABLE gerando um arquivo DUMP! Isso é um bug?

0
Olá Pessoal, No meu ambiente existem uns 30 profissionais que utilizam o SQL Server diariamente (Dev, ERP e BI). Com isso, cada dia uma pessoa me aparece com um problema diferente para resolver. Entretanto, em uma dessas vezes, eles se superaram e me mandaram um problema que eu não consegui explicar o motivo. Durante uma [...]

Colunas com valores NULL ocupam espaço em disco? Mito?

0
Olá Pessoal, Muitos de vocês já devem ter recebido a seguinte solicitação: “Favor criar uma coluna nova na tabela X (80 milhões de linhas). Como os valores existentes serão NULLs, esse campo não ocupará espaço em disco e não teremos nenhum impacto nessa tabela“. Entretanto, não é exatamente isso que acontece! Tipos de dados que [...]

Casos do Dia a Dia: Exclusão de campo Text não libera espaço em disco?

4
Fala pessoal, Compartilhando mais uma experiência que tive no meu dia a dia de trabalho, após a verificação com a equipe de desenvolvimento da possibilidade de exclusão de 2 campos do tipo text de uma tabela muito utilizada, fui com toda empolgação na minha base de testes verificar o quanto de espaço em disco eu [...]
Go to Top