Archive for August, 2009

Na unikátní indexu se dá povolit ignore_dup_key. Použití je v příkazu insert. Pokud se bude náhodou vkládat stejný unikátní klíč, který už existuje, tak se nezobrazí chyba a ani k ní nedojde. Místo ní se jen insert vynechá. Příklad:

1
2
3
4
5
6
7
8
9
10
DECLARE @foo TABLE  (
	col INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON),
	col1 CHAR(1)
)
 
INSERT INTO @foo VALUES(1, 'a')
INSERT INTO @foo VALUES(2, 'b')
INSERT INTO @foo VALUES(1, 'c')
 
SELECT col, col1 FROM @foo

vrátí:

1
2
3
4
5
6
7
8
9
10
11
(1 row(s) affected)
 
(1 row(s) affected)
 
Duplicate key was ignored.
(0 row(s) affected)
 
col         col1
----------- ----
1           a
2           b
Share

Pokud potřebuji vložit více hodnot, které jdou po sobě mohu použít:
1) cyklus(bude hodně pomalé)
2) insert into … values (…),(…),(…)
3) systémovou tabulku master..spt_values

1
2
3
4
5
SELECT number
FROM master..spt_values
WHERE type = 'P'
   AND number >=1
   ORDER BY number

Tento příkaz vrátí seznam hodnot od 1 do 2047, které jdou po sobě a inkrementálně se zvyšují o 1.
4) rankovací funkci a jakoukoliv tabulku, která se použije jako podkladová a z které se podle počtu záznamů generuje počet řádků ve výsledku

1
2
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS id
FROM master..spt_values

Tento příkaz vrátí seznam hodnot od 1 do 2346, které jdou po sobě a inkrementálně se zvyšují o 1.

Share