Vamos utilizar o SQL Server 2008 Express?

Coordinator
Feb 21, 2009 at 4:01 PM
Acho que é uma boa usar o novo SQL no nosso projeto e estudar suas novas features!!
Coordinator
Feb 24, 2009 at 7:18 PM

SQL Server 2008: Melhorias em T-SQL 

SQL Server 2008 introduziu excelentes melhorias para ter uma melhor produtividade tanto para "desenvolvedores" como "administradores" reduzindo tempo de gasto utilizado para desenvolver certas aplicações utilizanto T-SQL. Uma delas é o Intellisense sem dúvida é um recurso fantástisco, essa caracteristica trabalha automáticamente com checagem de sintaxe igual ao Visual Studio 2008, como vocês podem ver na imagem abaixo o uso dela:

Lembrando que essa funcionalidade não está disponivel para SQL Server 2000 nem 2005 apenas no SQL Server 2008

Algumas melhorias também que estão presentes no SQL Server 2008 á respeito de declaração de variáveis.
 
No SQL Server 2005 temos:

DECLARE @VAR1 INT
      
SET @VAR1 = 2

Já no SQL Server 2008 temos:

DECLARE @VAR1 INT = 5
DECLARE @VAR2 INT = 10

DECLARE @VAR3 INT = @VAR1 * @VAR2
    
PRINT @VAR3

 

As variáveis podem ser inicializadas no momento da declaração, ou seja, nas mesmas linhas declarando o valor logo após a instrução DECLARE sem utilizar o operador SET. Vários tipos de dados podem ser utilizados, inclusive o SQLCR, mais não será possível variáveis do tipo TEXT, NTEXT ou IMAGE.

Operadores
Esses operadores se encontram presentes nas linguagens C#, C++ entre outras, a vantagem de utilizar-los no SQL Server 2008 é evitar mau desempenho, manter o código mais legível dentre outras vantagens. Abaixo segue a lista dos operadores.

+= 
-= 
*= 
/= 
%= 
&= 
^=
|=

-- Declarando primeira variável

DECLARE @VAR10 INT = 10

-- Declarando segunda variável

DECLARE @VAR11 INT = 11

-- Declarando terceira variável e atribuindo nela algumas variáveis

DECLARE @VAR12 INT = @VAR10 * @VAR11

-- Declarando quarta variável e logo após trabalhando com o operador +=

DECLARE @VAR13 INT = 15 
 SET @VAR12 += @VAR13
 
   SELECT 
@VAR12 as 'ValorFinal'

 

Object Dependencies Improvement
 
Quem trabalha com SQL Server 2005 esse nome provavelmente não é novidade, pois foram acrescentadas mais algumas delas no SQL Server 2008. É um recurso que provê uma melhor busca entre objetos através de catálogos tanto introduzidos em view quanto em dynamic management functions. Essas dependências são sempre referenciadas por nome do Schema, referência da entidade, nome do servidor entre outras e são seguidas por: stored procedures, tables, functions,triggers, user-definied types, xml schema-collections entre outros. O SQL Server 2008 introduziu novos objetos como:

sys.sql_expression_dependencies (Catalog View)

sys.dm_sql_referenced_entities (DMF)  

sys.dm_sql_referencing_entities (DMF)

Pode-se visualizar as dependências por dois meios, um deles é usando a interface gráfica, Clique no botão direito em uma tabela e selecione: View Depedencies, como mostrado na imagem a seguir:

 
em seguida:
 

via T-SQL seria assim:

USE
 tempdb;
GO

IF OBJECT_ID('dbo.Tabela1','U') IS NOT NULL
DROP TABLE dbo.
Tabela1
GO

IF OBJECT_ID('dbo.MinhaView','V') IS NOT NULL
DROP VIEW dbo.
MinhaView
GO

CREATE TABLE dbo.Tabela1
(
Col1 INT
,
Col2 
INT
)
GO

CREATE VIEW dbo.MinhaView as 
SELECT Col1,Col2 FROM dbo.
Tabela1
GO

SELECT OBJECT_NAME(referencing_id) as referecing_entity_name,
referenced_server_name as server_name
,
referenced_database_name as database_name
,
referenced_schema_name as schema_name
,
referenced_entity_name
FROM sys.
sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(N'dbo.MinhaView'
);
GO

SELECT
referenced_schema_name as objschema,
referenced_entity_name as objname
,
referenced_minor_name as minorname
,
referenced_class_desc as
 class
FROM sys.dm_sql_referenced_entities('dbo.MinhaView','OBJECT'
);
GO

SELECT
referenced_schema_name as objschema,
referenced_entity_name as objname
,
referenced_class_desc as
 class
FROM sys.dm_sql_referenced_entities('dbo.MinhaView','OBJECT'
);
GO

Coordinator
Feb 24, 2009 at 7:29 PM

GROUPING SETS

 

Olá, pessoal, sem dúvidas, a respeito de T-SQL, o SQL Server 2008 nos trouxe a mais uma excelente funcionalidade conhecida como GROUPING SETS.

 

O GROUPING SETS é um grupo de instruções utilizado para obter um certo resultado, por exemplo: ao invés de utilizarmos o conhecido UNION ALL para nos trazer a união de vários campos calculados, você poderá agora utilizar o GROUPING SETS, pois, você terá um melhor ganho de desempenho; há também outras funcionalidades para trabalhar juntamente com o GROUPING SETS, por exemplo: CUBE, ROLLUP e outras que serão apresentadas em breve.

 

Algumas considerações:

 

 * GROUPING SETS são funções que ajudam a chegar rapidamente em um ponto com resultados esperados e, juntamente com ele, pode-se utilizar funções como: AVG, SUM, MAX, MIN entre outras;

 

 * Dependendo da consulta, GROUPING SETS podem obter um melhor desempenho quando comparado com o UNION ALL;

 

 * Podem obter também um melhor desempenho para executar instruções de outras fontes de dados;

 

Essa característica é excelente principalmente para desenvolvedores, é como o MERGE, que é outra funcionalidade do SQL Server 2008 que será assunto nos próximos artigos, é possível obter uma soma, um valor máximo ou um valor mínimo, utilizando uma  única instrução.

 

Isso está sendo mostrado nos códigos abaixo: 

USE master

-- Se existir algum banco de dados cujo nome é 'DB_TESTE', Delete.

IF EXISTS(SELECT name FROM sys.databases WHERE name = 'DB_TESTE')
DROP DATABASE DB_TESTE

-- Criação do banco;
CREATE DATABASE [DB_TESTE]

-- Se posicionando no banco criado
USE [DB_TESTE]

-- Se existir alguma tabela cujo nome é 'DB_TSQL', Delete.
IF EXISTS(SELECT name FROM sys.tables WHERE name = 'DB_TSQL')
DROP DATABASE DB_TSQL

-- Criação da tabela

CREATE TABLE DBO.TBL01 
(
ID INT
,
NOME NVARCHAR(60
),
VALOR SMALLMONEY
,
DATANASC 
DATETIME
)

-- Inserindo alguns valores
INSERT dbo.TBL01 VALUES (1,'LUCAS',20,GETDATE()),(2,'THIAGO',30,GETDATE()),(3,'JOÃO',40,GETDATE()),
(4,'PEDRO',50,GETDATE()),(5,'RAFAEL',60,GETDATE()),(6,'GUSTAVO',70,GETDATE
()),
(7,'RODRIGO',80,GETDATE()),(8,'JEFERSON',90,GETDATE()),(9,'DIEGO',100,GETDATE())

-- Selecionando todos os campos, sem utilizar o GROUPING SETS.
SELECT * FROM DBO.TBL01

-- no SQL Server 2005 no se quisermos pegar mais de um valor em mais de uma consulta, teriamos que utilizar por exemplo o UNION ALL

SELECT AVG(ID) FROM TBL01
UNION 
ALL
SELECT COUNT(NOME) FROM
 TBL01
UNION 
ALL
SELECT SUM(VALOR) FROM TBL01

-- o SQL Server 2008 pode nos facilitar isso agora desta forma:
SELECT AVG(ID),COUNT(NOME),SUM(VALOR)
FROM
 DBO.TBL01
GROUP BY GROUPING SETS 
(
(
ID
),
(
NOME
),
(
VALOR
),
()
)

SELECT TOP 2 MAX(DATANASC) FROM 
DBO.TBL01
GROUP BY GROUPING SETS 
(
(
DATANASC
),
()
)


P.S.: O autor dos textos acima é Lucas Souza Saraiva, retirados do seu blog em http://souzalucas.spaces.live.com/