“No such interface supported” ao criar / abrir um projeto no SSMS 2012

Onde trabalhamos, utilizamos o Source Safe para realizar o controle de alterações nas functions e procedures de Banco de Dados. Foi criado um projeto que contém os objetos e, dentro do SSMS, fazemos o checkout / checkin deles, já integrado com o Source Safe. Acontece que hoje, ao tentar migrar o projeto para abrirmos no SQL Server Management Studio 2012, apareceu o erro: Error: No such interface supported File: vsee\internal\inc\vscomptr.inl Line number: 259 ...

05 set. 2012 · 1 minuto · 152 palavras · Logan D. Merazzi

Cuidados ao usar Exists

6 meses depois do último post (e com o planejamento de ano novo completamente furado – o de postar pelo menos 1 vez a cada 15 dias… 🙁 )… Dica rápida para quem usar EXISTS : Nunca utilize uma função de agregação quando utilizar o EXISTS. Por quê? Segue um script rápido que insere alguns poucos registros em uma tabela para testarmos… CREATE DATABASE TesteExists --Super original, não? :-) GO USE TesteExists GO CREATE TABLE Pessoa (Nome varchar(20), Nascimento datetime, Sexo char(1), CPF varchar(11), EstadoCivil char(1)) GO INSERT INTO Pessoa Values ('Logan', '19810101', 'M', '11111111111','C') INSERT INTO Pessoa Values ('Denise','19800101', 'F', '22222222222','C') INSERT INTO Pessoa Values ('Sophia', '20120101', 'F', NULL,'S') GO IF EXISTS (SELECT MAX(Nascimento) FROM Pessoa WHERE nome = 'xxxxx') SELECT 'OK' ELSE SELECT 'NOK' ...

03 jul. 2012 · 2 minutos · 216 palavras · Logan D. Merazzi

Colunas Default (e Como Mantê-las)

Muitas vezes precisamos que uma determinada coluna receba um valor padrão, por exemplo, uma tabela de pedidos que, ao inserir um registro novo, coloca por padrão a data atual no campo que referencia a data do pedido. Ok, mas como é que eu faço isso? Muito simples, pequeno gafanhoto, ao criar uma tabela: CREATE TABLE MinhaTabela ( Codigo int identity, Nome varchar(100) NOT NULL, Valor int NOT NULL, Data datetime not null CONSTRAINT DF_MinhaTabela_Data default getdate() ) Putz! Mas o campo Valor também tinha que ter um valor Default… Será que eu consigo colocar sem ter que refazer a criação ou dropar a coluna? ...

13 dez. 2011 · 3 minutos · 490 palavras · Logan D. Merazzi

Entendendo e usando CTE (Common Table Expression)

As CTE’s são muito semelhantes às tabelas derivadas, mas com uma boa vantagem… De acordo com o BOL a estrutura para uma CTE é: WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition ) SELECT FROM expression_name; Uma comparação de uso entre uma tabela derivada e uma CTE: Tabela derivada: SELECT * FROM (SELECT Nome, Cidade FROM CLIENTES WHERE DataCadastro > '2011-01-01') AS CLI2011 Usando CTE: ;WITH CLI2011 AS ( SELECT Nome, Cidade FROM CLIENTES WHERE DataCadastro > '2011-01-01') SELECT * FROM CLI2011; Note o ‘;’ antes do WITH… Ele está lá por eu considerar uma boa prática, uma vez que sempre que você utilizar uma CTE, caso tenha alguma outra consulta antes, ela obrigatoriamente deve terminar com o ‘;’. Então, por via das dúvidas, sempre coloque ele antes do WITH, quando for usar uma CTE. ...

10 ago. 2011 · 2 minutos · 293 palavras · Logan D. Merazzi

Como visualizar as descrições das colunas de uma tabela

Post rápido… Estava cansado e ir no design do SSMS pra ver a descrição de algumas colunas e resolvi pegar as tabelas relacionadas e montar um script que fizesse isso. Segue: SELECT OBJECT_NAME(c.object_id) Tabela, c.name Coluna, ex.value Descricao FROM sys.columns c LEFT OUTER JOIN sys.extended_properties ex ON ex.major_id = c.object_id AND ex.minor_id = c.column_id WHERE OBJECT_NAME(c.object_id) = ‘Sua_Tabela’ ORDER BY OBJECT_NAME(c.object_id), c.column_id Espero que ajude… 🙂 []’s

11 jul. 2011 · 1 minuto · 67 palavras · Logan D. Merazzi

Funções de Ranqueamento

Existem 4 funções de ranqueamento que podem ser utilizados com a cláusula OVER: ROW_NUMBER RANK DENSE_RANK NTILE Um exemplo de uso: SELECT orderid, custid, val, ROW_NUMBER() OVER(ORDER BY val) AS rownum, RANK() OVER(ORDER BY val) AS rank, DENSE_RANK() OVER(ORDER BY val) AS dense_rank, NTILE(10) OVER(ORDER BY val) AS ntile FROM Sales.OrderValues ORDER BY val; O retorno é: orderid custid val rownum rank dense_rank ntile ----------- ----------- --------- ------- ------- ---------- ----- 10782 12 12.50 1 1 1 1 10807 27 18.40 2 2 2 1 10586 66 23.80 3 3 3 1 10767 76 28.00 4 4 4 1 10898 54 30.00 5 5 5 1 10900 88 33.75 6 6 6 1 10883 48 36.00 7 7 7 1 11051 41 36.00 8 7 7 1 10815 71 40.00 9 9 8 1 10674 38 45.00 10 10 9 1 ... 10691 63 10164.80 821 821 786 10 10540 63 10191.70 822 822 787 10 10479 65 10495.60 823 823 788 10 10897 37 10835.24 824 824 789 10 10817 39 10952.85 825 825 790 10 10417 73 11188.40 826 826 791 10 10889 65 11380.00 827 827 792 10 11030 71 12615.05 828 828 793 10 10981 34 15810.00 829 829 794 10 10865 63 16387.50 830 830 795 10 (830 row(s) affected) A função ROW_NUMBER() retorna uma ordenação sequencial para o resultado da consulta, baseado no que foi especificado no ORDER BY da cláusula OVER. Note que eu poderia retornar a ordenação pela coluna custid, modificando apenas a coluna rownum e mantendo a mesma ordem no retorno da consulta. ...

23 fev. 2011 · 3 minutos · 437 palavras · Logan D. Merazzi

A cláusula OVER

Com a cláusula OVER você faz com que uma janela de registros passe por alguns cálculos. Entenda por janela de registros como sendo uma quantidade de registros no qual o cálculo será realizado. Ao contrário do GROUP BY, onde o retorno é de apenas uma linha para cada agrupamento realizado, com a cláusula OVER você consegue trabalhar no contexto do SELECT, ou seja, para cada registro da sua lista. Desta forma, você não precisa trabalhar com o GROUP BY e ainda tem como retorno o cálculo desejado. ...

22 fev. 2011 · 2 minutos · 241 palavras · Logan D. Merazzi