Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要从字符串中吐出的SQL查询_Sql_Sql Server_Split - Fatal编程技术网

要从字符串中吐出的SQL查询

要从字符串中吐出的SQL查询,sql,sql-server,split,Sql,Sql Server,Split,我正在尝试插入一个临时表,如下所示 declare @st1 varchar(50) = 'Today+Test+12456' 例如:选择今天,测试,12456 我不希望像下面这样查询行 CREATE TABLE #TempTable ( Id INT IDENTITY, col1 varchar(50), col2 varchar(50), col3 nvarchar(50) ); insert into #TempTable select Today,T

我正在尝试插入一个临时表,如下所示

declare @st1 varchar(50) = 'Today+Test+12456'
例如:
选择今天,测试,12456

我不希望像下面这样查询行

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

不确定我是否理解正确,或者你的定义需要澄清,但是。。。我认为以下查询将解决您的请求:

Today
Test
123456

好的,根据我从评论中收集的信息

这里有两个选择。XML方法和ParseName()。如果文本中有句点和/或超过4项,则ParseName()将失败

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

我看你已经更新了这个问题

如果您真的想使用动态SQL,它可以像

Pos1    Pos2    Pos3
Today   Test    12456
可能有帮助吗

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)

这些列将具有什么值
@ST1
是标量变量,您不能在
FROM
子句中使用它。我认为@AngelM,但op没有查找行。根据最终需求,仍有类似的重复。SQL Server在设计上是声明性的。它不支持宏替换,您必须用逗号替换+并作为动态执行sql@JohnCappelletti我可以用逗号代替它。但我怎么得到它呢?可能是No的重复。我想在@tentable select Today,Test,12456中插入,这是我所期望的。欣赏it@user3335081乐意help@user3335081请参见编辑。这种复杂的动态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)
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