Показаны сообщения с ярлыком sql. Показать все сообщения
Показаны сообщения с ярлыком sql. Показать все сообщения

пятница, 3 июля 2009 г.

MS SQL Function Split

Вариант реализации функции Split, которая разрезает строку на мини-таблицу, по умолчанию в качестве разделителя используется пробел.
CREATE FUNCTION [dbo].[fn_Split](
@text nvarchar(max),
@delimiter char(1) = ' '
)

RETURNS @Strings TABLE
(
position int IDENTITY PRIMARY KEY,
value nvarchar(max)
)
AS
BEGIN
DECLARE @INDEX int
SET @INDEX = -1
WHILE (LEN(@text) > 0)
BEGIN
SET @INDEX = CHARINDEX(@delimiter , @text)
IF (@INDEX = 0) AND (LEN(@text) > 0)
BEGIN
INSERT INTO @Strings VALUES (@text)
BREAK
END
IF (@INDEX > 1)
BEGIN
INSERT INTO @Strings VALUES (LEFT(@text, @INDEX - 1))
SET @text = RIGHT(@text, (LEN(@text) - @INDEX))
END
ELSE
SET @text = RIGHT(@text, (LEN(@text) - @INDEX))
END
RETURN
END
Пример:
SELECT * FROM [dbo].[fn_Split] (
'hello;world;split'
,';'
)
Результат:

positionVALUE
11hello
22world
33split


Читать дальше...

среда, 3 июня 2009 г.

Как сбросить Identity в MS Sql

Если у Вас в таблице есть поле с автоинкрементном (Identity), то при удалении строк из таблицы нумерация все равно продолжается с последнего числа.

Есть несколько вариантов решения этой проблемы.

1. DBCC CHECKIDENT
Это самый простой вариант, просто устанавливаете желаемое значение. Будьте осторожны, не установите значение меньше, чем последнее.

DBCC CHECKIDENT (<table name>,RESEED,<new value>)

2. Удалить и добавить поле
Это более безопасный вариант т.к. новые значения присваиваются автоматически, но требует большего количества действий и меняет порядок столбцов.

ALTER TABLE <table name> DROP CONSTRAINT <constraint name>

ALTER TABLE <table name> DROP COLUMN <column name>

ALTER TABLE <table name> ADD <column name> bigint identity (1,1) NOT NULL

ALTER TABLE <table name> ADD CONSTRAINT <constraint name> PRIMARY KEY CLUSTERED(<column name> ASC)WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]

3. Удалить и создать таблицу
Этот вариант устанавливает новое безопасное значение и сохраняет порядок колонок.

Создайте новую временную таблицу с такой же структурой, скопируйте все данные во временную таблицу, удалите старую таблицу и переименуйте временную.

Выбор подходящего варианта остается за вами.
Читать дальше...