SQL-запрос плевать из строки - PullRequest
0 голосов
/ 09 января 2019
declare @st1 varchar(50) = 'Today+Test+12456'

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

CREATE TABLE #TempTable (
    Id INT IDENTITY,
    col1 varchar(50), 
    col2 varchar(50), 
    col3 nvarchar(50)
);
insert into #TempTable select Today,Test,12456;

Например: select Today,Test,12456

Я не ищу запрос в виде строк, как показано ниже.

Today
Test
123456

Ответы [ 3 ]

0 голосов
/ 09 января 2019

ОК, из того, что я собираю из комментариев.

Вот два варианта. Подход XML и ParseName (). ParseName () завершится ошибкой, если у вас есть точки в тексте и / или более 4 элементов

declare @st1 varchar(50) = 'Today+Test+12456'

Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
      ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
      ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
From  (Select Cast('<x>' + replace((Select replace(@st1,'+','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 



Select Pos1 = parsename(tStr,3)
      ,Pos2 = parsename(tStr,2)
      ,Pos3 = parsename(tStr,1)
From  ( values(replace(@st1,'+','.'))) B1(tStr)

Оба вернутся

Pos1    Pos2    Pos3
Today   Test    12456

EDIT

Я вижу, что вы обновили вопрос.

Если вы ДЕЙСТВИТЕЛЬНО хотели перейти на динамический SQL, это может быть так просто, как

CREATE TABLE #TempTable (
Id INT IDENTITY,
col1 varchar(50), 
col2 varchar(50), 
col3 nvarchar(50)
);


Declare @st1 varchar(50) = 'Today+Test+12456'
Declare @SQL varchar(max) = 'Insert Into #TempTable values ('''+replace(@st1,'+',''',''')+''')'
Exec(@SQL)
0 голосов
/ 09 января 2019

Может быть, это помогает

DECLARE @input NVARCHAR(50) = 'Today+Test+12456+'
DECLARE @ColumnValue NVARCHAR(100)
DECLARE @Index INT
DECLARE @SelectString   [nvarchar] (500) = 'SELECT ' 
 WHILE CHARINDEX('+', @input) > 0
 BEGIN
    SELECT @Index  = CHARINDEX('+', @input)  
    SELECT @ColumnValue = SUBSTRING(@input, 1, @Index-1)
    Set @SelectString = @SelectString + '''' +@ColumnValue + ''', '
    SELECT @input = SUBSTRING(@input, @Index + 1, LEN(@input) - @Index)
 END
SELECT @SelectString = SUBSTRING(@SelectString,0, LEN(@SelectString))
EXEc sp_sqlexec @SelectString
0 голосов
/ 09 января 2019

Не уверен, правильно ли я понял или ваше определение нуждается в уточнении, но ... Я думаю, что следующий запрос удовлетворит ваш запрос:

DECLARE @st1 VARCHAR(50) = 'Today+Test+12456';
INSERT INTO @TempTable
SELECT 'SELECT ' + REPLACE(@st1, '+', ', ');
...