Nesse exemplo, vamos usar o COUNT com valores nulos
DECLARE @Pessoa TABLE ( Id INT, Nome varchar(60) ) -- inclusão de registros com valor NULL para a coluna "Nome" INSERT @Pessoa VALUES(1, 'Jose'), (2, 'Maria'), (3, null) -- contagem de todos registros SELECT COUNT(*) as qtd FROM @Pessoa --> Resultado: qtd = 3 -- count(*) não usa o valor de uma coluna específica, -- serão retornados todos registos com valores nulos e registros duplicados -- contagem de todos registros, informando uma coluna SELECT COUNT(Nome) as qtd FROM @Pessoa --> Resultado: qtd = 2 -- count(Nome_Coluna) retorna valores não nulos
Ao compararmos campos com valores nulos em codições WHERE, devemos tomar certos cuidados.
Exemplos:
DECLARE @Pessoa TABLE ( Id INT, Nome varchar(60) ) -- inclusão de registros com valor NULL para a coluna "Nome" INSERT @Pessoa VALUES(1, 'Jose'), (2, 'Maria'), (3, null) -- contagem de registros, comparando com valor null SELECT COUNT(*) as qtd FROM @Pessoa WHERE Nome = null --> Resultado: qtd = 1 -- mesmo resultado comparando com IS NULL SELECT COUNT(*) as qtd FROM @Pessoa WHERE Nome is null --> Resultado: qtd = 1 -- Vamos mudar o comportamento dos operadores de comparação ( = e <> ) para valores nulos -- verificando o valor da sessão para ANSI_NULLS -- resultado será = 0, devido ao valor padrão ser OFF select SESSIONPROPERTY ( 'ANSI_NULLS' ) -- definindo para ON SET ANSI_NULLS ON SELECT COUNT(*) as qtd FROM @Pessoa WHERE Nome = null --> Resultado: qtd = 0 (zero..)
Hoje o post é curto, vamos ver um exemplo simples do Update com FROM e definindo um alias para a tabela que desejamos alterar o registro.
UPDATE MinhaTabela SET MinhaTabela.campo1 = 'valor' FROM Pessoa as MinhaTabela -- inner join .. -- left join .. -- where .. GO
Repare que é possível efetur JOINs relacionando com outras tabelas.
Qual a diferença entre sys.columns X syscolumns ?
sp_help 'sys.columns' go sp_help 'syscolumns' go
SP_Help irá mostrar que ambas são views (campo Type = ‘view’).
Diferenças:
- syscolumns é uma visão que está obsoleto e será removida em uma versão futura do SQL Server.
Foi deixada por motivo de compatibilidade, quando o SQL Server 2005 foi introduzido.
Nas versões 2000 e anteriores, eram os meta-dados reais das colunas, e você poderia editar diretamente os dados!
No 2005 , tornou-se uma visão verdadeira, e a capacidade de manipular diretamente os dados de meta foi removido.
- sys.columns é uma visão que a Microsoft tem planos de manutenção, podendo adicionar mais colunas no futuro, mas as colunas e ordem do que existe hoje deve permanecer o mesmo.
Hoje mostrarei um exemplo de como usar o CROSS JOIN, que pode ser útil quando queremos relacionar dados entre tabelas que não possuem campos de relacionamentos.
select * from TipoEndereco A go -- (2 linha(s) afetadas) select B.* from endereco B go -- (43045 linha(s) afetadas) select A.* from endereco A cross join TipoEndereco B go -- (86090 linha(s) afetadas)
Sem a necessidade da cláusula ON, um cross join efetua um produto cartesiano (qtd. de A X qtd. de B)
Olá amigos(as) ![]()
Hoje vou mostrar duas maneiras de como criar um valor padrão para colunas:
- CREATE DEFAULT (Transact-SQL)
- [ CONSTRAINT constraint_name ] DEFAULT constant_expression
Vamos para o exemplo de criar um default:
CREATE DEFAULT DF_DataCadastro AS GetDate(); GO CREATE TABLE MyTempTable(Id int, DataCadastro datetime) GO EXEC SP_BINDEFAULT 'DF_DataCadastro','MyTempTable.DataCadastro' -- Messagens: Default bound to column. INSERT MyTempTable(Id) VALUES(1), (2) SELECT * FROM MyTempTable
O resultado do SELECT exibe o valor da coluna DataCadastro sendo data/hora da inserção do registro.
Até aqui nada de diferente.
Vamos para o segundo exemplo:
CREATE TABLE MyTempTable( Id int, DataCadastro datetime CONSTRAINT DF_MyTempTable_DataCadastro DEFAULT GetDate() ); GO INSERT MyTempTable(Id) VALUES(1), (2) SELECT * FROM MyTempTable
O que mudou foi a maneira de criarmos o valor padrão para a coluna DataCadastro.
A vantagem de associar um valor padrão para uma coluna é de podemos utilizar o mesmo nome do default criado, para outras tabelas.
Já a restrição “default constraint” deve ter seu nome seguindo as regras para identificadores, ou seja, único para cada coluna.
A “desvantagem” em associar um valor padrão, é que ele será REMOVIDO:
“Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso..”
Fonte: http://msdn.microsoft.com/en-us/library/ms173565.aspx
Espero ter esclarecido algumas dúvidas.
Até o próximo artigo!
