29 listopada 2011

SQL Tipsy (3) – deklaracja i inicjalizacja zmiennych w MS SQL Server 2008

Można prościej


Pewnie większość programistów SQL Server'a już zapoznała się ze zmianami w sposobie deklarowania i inicjalizacji zmiennych w wersji MS SQL Server 2008. Aczkolwiek, dla tych którzy jeszcze o tym nie czytali przygotowałem krótkie demo (dzisiaj 289 sekund, więc trochę długo), w którym przepisuje kod napisany w stylu T-SQL'a z MSSQL 2000 na wersję 2008.




Kod przed modyfikacjami:

IF OBJECT_ID('dbo.temp','U') IS NOT NULL DROP TABLE dbo.temp
CREATE TABLE temp(id int)

IF OBJECT_ID('dbo.temp2','U') IS NOT NULL DROP TABLE dbo.temp2
CREATE TABLE temp2(id int)

DECLARE @i int 
      , @concatenated VARCHAR(100)
   , @myDate DATETIME
SET @i = 0
SET @concatenated = ''
SET @myDate = GETDATE()
WHILE (@i < 10)
BEGIN
 INSERT INTO temp(id)
 SELECT 1
 UNION
 SELECT 2

 INSERT INTO temp2(id)
 SELECT a.id
   FROM (
  SELECT 3 id
  UNION
  SELECT 4
  ) a
 SET @i = @i + 1
 SET @concatenated = @concatenated + CAST(@i AS VARCHAR)
 SET @myDate = @myDate + 1
END

SELECT (SELECT COUNT(*) FROM temp) AS TempCount
     , (SELECT COUNT(*) FROM temp2) AS Temp2Count
     , @concatenated AS Concatenated
     , @myDate AS MyDate
 

Kod po modyfikacjach:

IF EXISTS(SELECT * FROM sys.types WHERE name = 'temptables') DROP TYPE dbo.temptables
CREATE TYPE dbo.temptables AS TABLE ( Id int );
GO
DECLARE @temp AS dbo.temptables
     , @temp2 AS dbo.temptables;
DECLARE @i int = 0 
      , @concatenated VARCHAR(100) = ''
   , @myDate DATETIME = GETDATE();
WHILE (@i < 10)
BEGIN
 INSERT INTO @temp(id)
 VALUES (1), (2)

 INSERT INTO @temp2(id)
 SELECT a.id
   FROM (
  VALUES( 3 ) , (4)
  ) a (id)
 SET @i += 1
 SET @concatenated += CAST(@i AS VARCHAR)
 SET @myDate += 1
END

SELECT (SELECT COUNT(*) FROM @temp) AS TempCount
     , (SELECT COUNT(*) FROM @temp2) AS Temp2Count
     , @concatenated AS Concatenated
     , @myDate AS MyDate

Hope this helps.

1 komentarz:

  1. Witam

    Bardzo fajny film, pokazujący jak się zmienia t-sql. Tylko jedna uwaga techniczna. Dźwięk bardzo cichy i mimo podkręcenia na maxa ledwie słyszalny.

    OdpowiedzUsuń

Uwaga: tylko uczestnik tego bloga może przesyłać komentarze.