Tämä clippi demonstroi hyvin BULK INSERTin luonteen:
http://dbareactions.tumblr.com/post/48615498654/when-i-use-bulk-insert
Heh
Blogi tietokantaohjelmoinnista SQL Server ympäristössä
Tämä clippi demonstroi hyvin BULK INSERTin luonteen:
http://dbareactions.tumblr.com/post/48615498654/when-i-use-bulk-insert
Heh
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
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?
SQL Server 2012:ta myötä SQL Serverin asennukseen on tullut mukava uusi ominaisuus: ProductUpdate. Tämän ominaisuuden avulla voit asentaa samalla kertaa päivitykset, eikä niitä tarvitse erikseen asentaa alkuinstallaation jälkeen. Alkuasennuksen yhteydessä päivitykset voidaan ottaa mukaan käynnistämällä asennus komentoriviltä. Kokeilin tätä seuraavasti:
PS E:\>.\Setup /Action=Install /UpdateSource="C:\Mediat"
Tämä käynnisti asennuksen ja otti SP1 asennuksen lennosta mukaan:
Lisätietoja asiasta mm. CSS SQL Server Engineers blogista. Lisäksi kannattaa lukea Glen Berryn mainio artikkelisarja (1, 2, 3) SQL Serverin asennuksesta ja muutama artikkeli Tempdb-kannan konfiguroinnista. Päälähteenä asennukseen toimii tietysti BOL.
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.
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
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.
Monesti PowerShellin haluaa aukeavan suoraan johonkin kansioon niin, että Powershellin prompti on suoraan ko. hakemistossa. Se onnistuu Windows Explorerista seuraavasti:
Great!
Ohessa esimerkki CREATE TABLE lauseesta, jossa on johdettu kenttä ja tarkastusmääre (CHECK CONSTRAINT) yhteen kenttään:
USE Testi
GO
IF OBJECT_ID('dbo.customer', 'U') IS NOT NULL
DROP TABLE dbo.customer
CREATE TABLE dbo.customer (
customer_id INT IDENTITY(1, 1) NOT NULL,
customer_name NVARCHAR(40) NOT NULL,
customer_age INT NOT NULL,
CONSTRAINT chk_customer_age CHECK (customer_age BETWEEN 0 AND 100),
customer_agetype AS
CASE WHEN customer_age <= 50 THEN 'young'
WHEN customer_age >50 THEN 'old'
ELSE NULL
END,
create_date DATE NOT NULL DEFAULT (GETDATE())
CONSTRAINT pk_customer_id PRIMARY KEY CLUSTERED (customer_id ASC)
)
GO
INSERT INTO dbo.customer (customer_name, customer_age)
VALUES('Jim', 10)
INSERT INTO dbo.customer (customer_name, customer_age)
VALUES('Joe', 60)
--katsotaan, kaikki ok
SELECT * FROM dbo.customer
INSERT INTO dbo.customer (customer_name, customer_age)
VALUES('Ed', -1)
--> ei mene läpi
INSERT INTO dbo.customer (customer_name, customer_age)
VALUES('Sue', 120)
--> ei mene läpi
Kommentit