Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сформировать таблицу из строки?  [new]
Alexandr Golovko
Member

Откуда: Kiev
Сообщений: 223
Есть строка цифр разделенных запятой: set @st='11,23,43'Как создать таблицу с данными из этой строки:
pole1
11
23
43
10 июл 03, 13:16    [257256]     Ответить | Цитировать Сообщить модератору
 Re: Как сформировать таблицу из строки?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Если не слишком длиная строка, то так мона
declare @st

set @st='11,23,43'
--собственно преобразование

select @st='select '+replace(@st, ',', ' select union all ')
exec(@st)
10 июл 03, 13:29    [257286]     Ответить | Цитировать Сообщить модератору
 Re: Как сформировать таблицу из строки?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Конечно
declare @st nvarchar(4000)

10 июл 03, 13:30    [257288]     Ответить | Цитировать Сообщить модератору
 Re: Как сформировать таблицу из строки?  [new]
alex-ikar
Member

Откуда: Москва
Сообщений: 192
1) можно через DTS забабахать.
Или
2) в Enterprise Manager
[Таблицы]->[Right Click]->[Import Data]->
Далле в свойствах DTS Wizard указываешь разделитель строк Запятую,
а разделитель столбцов ну например [Tab]
И так далее ...
10 июл 03, 16:03    [257652]     Ответить | Цитировать Сообщить модератору
 Re: Как сформировать таблицу из строки?  [new]
bushmen
Member

Откуда: г. Москва
Сообщений: 828
Можно применить утилитку BCP
10 июл 03, 16:24    [257693]     Ответить | Цитировать Сообщить модератору
 Re: Как сформировать таблицу из строки?  [new]
DarthVader
Guest
Дарю :-)


ALTER FUNCTION fn_srv_TokenizeStr
(
@STR VARCHAR (8000),
@TOKEN CHAR (1) = ' '
)
RETURNS @T TABLE (T VARCHAR (8000))
AS BEGIN
DECLARE
@IDX INT,
@LOC INT,
@LEN INT,
@P VARCHAR (8000),
@C CHAR (1),
@SQL VARCHAR (8000)
SET @STR = LTRIM(RTRIM(@STR))
SET @LEN = LEN (@STR)
IF @LEN < 2
BEGIN
INSERT INTO @T (T) VALUES (LTRIM(RTRIM(@STR)))
RETURN
END
SET @IDX = 1
SET @P = ''
WHILE @IDX <= @LEN
BEGIN
SET @C = SUBSTRING (@STR, @IDX, 1)
IF @C = @TOKEN
BEGIN
INSERT INTO @T (T) VALUES (LTRIM(RTRIM(@P)))
SET @P = ''
END
ELSE SET @P = @P + @C
SET @IDX = @IDX+1
END
INSERT INTO @T (T) VALUES (LTRIM(RTRIM(@P)))
RETURN
END
GO
10 июл 03, 16:52    [257746]     Ответить | Цитировать Сообщить модератору
 Re: Как сформировать таблицу из строки?  [new]
неважно кто
Guest
Не мое правда, но тоже дарю. :)

CREATE FUNCTION SPLIT (

@string varchar(8000),
@delimeter varchar(1) = ',')
RETURNS @ret TABLE (id int PRIMARY KEY)
AS
BEGIN
DECLARE @s int, @e int

SET @s = 0
WHILE CHARINDEX(@delimeter,@string,@s) <> 0
BEGIN
SET @e = CHARINDEX(@delimeter,@string,@s)
INSERT @ret VALUES (CONVERT(int,SUBSTRING(@string,@s,@e - @s)))
SET @s = @e + 1
END
INSERT @ret VALUES (CONVERT(int,SUBSTRING(@string,@s,8000)))
RETURN
END
10 июл 03, 17:18    [257791]     Ответить | Цитировать Сообщить модератору
 Re: Как сформировать таблицу из строки?  [new]
Glory
Member

Откуда:
Сообщений: 104760
https://www.sql.ru/subscribe/2003/146.shtml#9
10 июл 03, 17:32    [257809]     Ответить | Цитировать Сообщить модератору
 Re: Как сформировать таблицу из строки?  [new]
Nastasia
Member

Откуда:
Сообщений: 135
CREATE FUNCTION [dbo].[udf_string_to_table]
(
@StrValue varchar(8000),
@Delimiter varchar(10)
)

RETURNS @Array TABLE (strValue varchar(50))

AS
BEGIN


DECLARE
@StartLoc int,
@EndLoc int,
@Len int,
@Val varchar(50),
@ValNum int

IF LEN(@Delimiter) = 0 RETURN

SELECT @StartLoc = 1, @EndLoc = 1, @Len = LEN(@StrValue), @ValNum = 1
WHILE @Len > 0
BEGIN
SELECT @EndLoc = CHARINDEX(@Delimiter, @StrValue, @StartLoc)
IF @EndLoc = 0 SELECT @EndLoc = @Len + 1, @Len = 0
SELECT @Val = LTRIM(SUBSTRING(@StrValue, @StartLoc, @EndLoc - @StartLoc))
IF @Val <> ''
BEGIN
INSERT @Array (strValue) SELECT @Val
END
SELECT @StartLoc = @EndLoc + LEN(@Delimiter), @ValNum = @ValNum + 1
END
RETURN
END
10 июл 03, 18:58    [257919]     Ответить | Цитировать Сообщить модератору
 Re: Как сформировать таблицу из строки?  [new]
неважно кто
Guest
Glory все равно всех поборол, у него строка не ограничена 8000 символами. :)
10 июл 03, 19:24    [257940]     Ответить | Цитировать Сообщить модератору
 Re: Как сформировать таблицу из строки?  [new]
Важно кто
Guest
Неважно кто, Привет.
Тебя случайно не Егор звать?
11 июл 03, 01:08    [258061]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить