BULK INSERT

DBA, Developer, SQL Server 2012, T-SQL, Yleistä No Comments

Tämä clippi demonstroi hyvin BULK INSERTin luonteen:

http://dbareactions.tumblr.com/post/48615498654/when-i-use-bulk-insert

Heh :-)

Kuinka insertoida default-arvoja yhdellä insertillä?

DBA, Developer, GUI, SQL Server 2008, SQL Server 2012, T-SQL No Comments

Miten SQL Serverissä voi insertoida useita default-arvoja kantaan yhdellä insertillä? Oikea vastaus: käytä GO:ta. Ohessa tästä esimerkki:

USE Testi
GO

CREATE TABLE #testi
  ( 
     id INT IDENTITY(1, 1) PRIMARY KEY, 
     dt DATETIME DEFAULT GETDATE() 
  ) 

INSERT INTO #testi 
DEFAULT VALUES; 
GO 1000 

SELECT * 
FROM   #testi 

DROP TABLE #testi

Oraclen ja SQL Serverin eroavaisuuksista

DBA, Developer 1 Comment

Olen viimeaikoina saanut työskennellä lähinnä Oracle-kantojen kanssa. Eroavaisuuksia SQL Serveriin löytyy paljonkin. Yksi mielenkiintoinen eroavaisuus on mm. se miten Oracle käsittelee tyhjää arvoa. Toinen on hauska anekdootti on Oracle dual-taulu. Hyvät yhteenvedot Oraclen ja SQL Serverin eroavaisuuksista löytyy dba.se ja stackoverflow.com sivuilta löytyvistä kysymyksistä:

How to make a transition from SQL Server DBA to Oracle?
Basic differences between Oracle and SQL Server?

Indeksikyselyt by SQL Fool

DBA, Developer, SQL Server 2008, SQL Server 2012, T-SQL No Comments

Hyviä SQL-skriboja kaipaa aina. Jokin aika sitten piti tutkia yhdellä SQL Server-palvelimella majailevia indeksejä. Kyhäilin omaa SELECT-lausetta kunnes huomasin RSS feedeistä, että SQL Fool oli tuottanut kaksi erinomaista indeksikyselyä SQL Server-yhteisön tarpeisiin. Otin nämä välittömästi omaan arkistooni ja käyttöön. Ota sinäkin.

Master Data Services 2012

Developer, SQL Server 2012 No Comments

SQL Server 2012 on tuonut uusia ominaisuuksia Master Data Services-tuotteeseen. Loppukäyttäjiä ajatellen ehkä paras ominaisuus on Excel add-in, joka mahdollistaa datan käsittelyn suoraan Excelillä ja tiedon viemisen sitä kautta MDS:n.

Ohessa linkkejä MDS:n käyttöön:

Muita linkkejä MDS:n:

Hierarkiset kyselyt: adjacent list

Developer, SQL Server 2008, SQL Server 2012, T-SQL No Comments

Tietokannoissa hierarkioita hallitaan usein parent-child-tyyppisesti yhdessä taulussa. Tätä konstruktiota kutsutaan nimellä adjacent list. Raportointia varten tämä parent-child-hierarkia täytyy usein purkaa. Purku onnistuu parhaiten käyttämällä rekursiivista kyselyä, usein Common Table Expressionia. Löysin hyvän artikkelin, jossa tämä asia selitetään juurta jaksain. Ohessa tästä artikkelista lainattua koodia:

SET NOCOUNT ON;
USE Testi;

IF OBJECT_ID('dbo.Employees', 'U') IS NOT NULL DROP TABLE dbo.Employees;

CREATE TABLE dbo.Employees
(
  empid   INT         NOT NULL PRIMARY KEY,
  mgrid   INT         NULL     REFERENCES dbo.Employees,
  empname VARCHAR(25) NOT NULL,
  salary  MONEY       NOT NULL,
  CHECK (empid <> mgrid),
  CHECK (empid > 0)
);

CREATE UNIQUE INDEX idx_unc_mgrid_empid ON dbo.Employees(mgrid, empid);

INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES
  (1,  NULL, 'David'  , $10000.00),
  (2,  1,    'Eitan'  ,  $7000.00),
  (3,  1,    'Ina'    ,  $7500.00),
  (4,  2,    'Seraph' ,  $5000.00),
  (5,  2,    'Jiru'   ,  $5500.00),
  (6,  2,    'Steve'  ,  $4500.00),
  (7,  3,    'Aaron'  ,  $5000.00),
  (8,  5,    'Lilach' ,  $3500.00),
  (9,  7,    'Rita'   ,  $3000.00),
  (10, 5,    'Sean'   ,  $3000.00),
  (11, 7,    'Gabriel',  $3000.00),
  (12, 9,    'Emilia' ,  $2000.00),
  (13, 9,    'Michael',  $2000.00),
  (14, 9,    'Didi'   ,  $1500.00);

select * from dbo.Employees
go

--puretaan hiearkia omiin kenttiin
;WITH Tree AS
(
  SELECT empid, mgrid, 1 AS lvl,
    CAST(STR(empid, 10) AS VARCHAR(900)) COLLATE Latin1_General_BIN2 AS pth
  FROM dbo.Employees
  WHERE mgrid IS NULL

  UNION ALL

  SELECT C.empid, C.mgrid, P.lvl + 1,
    CAST(P.pth + STR(C.empid, 10) AS VARCHAR(900)) COLLATE Latin1_General_BIN2
  FROM Tree AS P
    JOIN dbo.Employees AS C
      ON C.mgrid = P.empid
)
SELECT empid, lvl,
  NULLIF(SUBSTRING(pth,  1, 10) + 0, 0) AS level1,
  NULLIF(SUBSTRING(pth, 11, 10) + 0, 0) AS level2,
  NULLIF(SUBSTRING(pth, 21, 10) + 0, 0) AS level3,
  NULLIF(SUBSTRING(pth, 31, 10) + 0, 0) AS level4,
  NULLIF(SUBSTRING(pth, 41, 10) + 0, 0) AS level5
FROM Tree;

Table Value Constructor

DBA, Developer, SQL Server 2008, SQL Server 2012, T-SQL No Comments

Aina löytyy jotain uutta opittavaa, tänään keksin, että SQL Serveristä löytyy ominaisuus nimeltään Table Value Constructor. Ohessa esimerkki sen käytöstä:

USE AdventureWorks2008R2
GO

SELECT *
FROM
  (VALUES
    (101, 'Bikes'),
    (102, 'Accessories'),
    (103, 'Clothes')
  ) AS Category(CategoryID, CategoryName);

SELECT TOP 100 * FROM HumanResources.Department

SELECT d.Name, d.GroupName, Category.CategoryName
FROM HumanResources.Department AS d
INNER JOIN
  (VALUES
    (1, 'Cat1'),
    (2, 'Cat2'),
    (3, 'Cat3')
  ) AS Category(CategoryID, CategoryName)
  ON d.departmentID = Category. CategoryID

Paikalliseen instassiin loggautumiseen on monta eri tapaa

DBA, Developer, SQL Server 2008, SQL Server 2012 No Comments

Paikalliseen SQL Server instanssiin voin kytkeytyä Management Studiolla viidellä eri tapaa

  • Tapa1: [KoneenNimi]\[InstanssinNimi]
  • Tapa2: localhost\[InstanssinNimi]
  • Tapa3: (local)\[InstanssinNimi]
  • Tapa4: .\[InstanssinNimi]
  • Tapa5: 127.0.0.1\[InstanssinNimi]

Ohessa kuva tästä:

ASCII-taidetta skriptiin

DBA, Developer, SQL Server 2008, SQL Server 2012, T-SQL No Comments

Jokaisen itseään kunnioittavan kantapeikon on käytettävä SQL-skriboissa ASCII-taidetta, joka kertoo olennaisen skriptistä. Esim. näin:

PRINT 'TTTTTTTTTTTTTTTTTTTTTTT                    SSSSSSSSSSSSSSS      QQQQQQQQQ     LLLLLLLLLLL             '
PRINT 'T:::::::::::::::::::::T                  SS:::::::::::::::S   QQ:::::::::QQ   L:::::::::L             '
PRINT 'T:::::::::::::::::::::T                 S:::::SSSSSS::::::S QQ:::::::::::::QQ L:::::::::L             '
PRINT 'T:::::TT:::::::TT:::::T                 S:::::S     SSSSSSSQ:::::::QQQ:::::::QLL:::::::LL             '
PRINT 'TTTTTT  T:::::T  TTTTTT                 S:::::S            Q::::::O   Q::::::Q  L:::::L               '
PRINT '        T:::::T                         S:::::S            Q:::::O     Q:::::Q  L:::::L               '
PRINT '        T:::::T                          S::::SSSS         Q:::::O     Q:::::Q  L:::::L               '
PRINT '        T:::::T         ---------------   SS::::::SSSSS    Q:::::O     Q:::::Q  L:::::L               '
PRINT '        T:::::T         -:::::::::::::-     SSS::::::::SS  Q:::::O     Q:::::Q  L:::::L               '
PRINT '        T:::::T         ---------------        SSSSSS::::S Q:::::O     Q:::::Q  L:::::L               '
PRINT '        T:::::T                                     S:::::SQ:::::O  QQQQ:::::Q  L:::::L               '
PRINT '        T:::::T                                     S:::::SQ::::::O Q::::::::Q  L:::::L         LLLLLL'
PRINT '      TT:::::::TT                       SSSSSSS     S:::::SQ:::::::QQ::::::::QLL:::::::LLLLLLLLL:::::L'
PRINT '      T:::::::::T                       S::::::SSSSSS:::::S QQ::::::::::::::Q L::::::::::::::::::::::L'
PRINT '      T:::::::::T                       S:::::::::::::::SS    QQ:::::::::::Q  L::::::::::::::::::::::L'
PRINT '      TTTTTTTTTTT                        SSSSSSSSSSSSSSS        QQQQQQQQ::::QQLLLLLLLLLLLLLLLLLLLLLLLL'
PRINT '                                                                        Q:::::Q                       '
PRINT '                                                                         QQQQQQ                       '
SET NOCOUNT ON;
SELECT TOP 1 * FROM sys.objects;

Vinkki tähän saatu SSIS Junkielta, ASCII-taidetta voi käydä vääntämässä online-työkalussa.

Käynnistä PowerShell suoraan hakemistoon

DBA, Developer, PowerShell No Comments

Monesti PowerShellin haluaa aukeavan suoraan johonkin kansioon niin, että Powershellin prompti on suoraan ko. hakemistossa. Se onnistuu Windows Explorerista seuraavasti:

  1. Mene hakemistoon, johon haluat avata PowerShellin
  2. Paina alt+D, jotta pääset osoiteriville
  3. Kirjoita ‘Powershell’ ja paina Enter –> Powershell avautuu tähän hakemistoon

Great!

Icons by N.Design Studio. Designed By Ben Swift. Powered by WordPress, and Free WordPress Themes
Entries RSS Comments RSS Log in