简单的SQL Server插入-将文本框中的多个逗号分隔值插入到一个列中

11 浏览
0 Comments

简单的SQL Server插入-将文本框中的多个逗号分隔值插入到一个列中

这应该很简单。我有一个带有逗号分隔值的文本框(文本区域)。

像这样:

425020,547538,548029,548853,552373

我有两种方法来处理这个问题。一种是使用有两列的表,|Number6|Number16| ...,另一种是只有一列|Number6|,以尝试消除任何混淆。对于下面的内容,它们是针对只有一列的表运行的。

这是我尝试的四种方法:

INSERT INTO MYDB.dbo.MYTABLE (Number6)
VALUES (425020, 547538, 548029, 548853, 552373);
INSERT INTO MYDB.dbo.MYTABLE
VALUES (425020, 547538, 548029, 548853, 552373);
INSERT INTO MYDB.dbo.MYTABLE (Number6)
VALUES (425020), (547538), (548029), (548853), (552373);
INSERT INTO MYDB.dbo.MYTABLE
VALUES (425020), (547538), (548029), (548853), (552373);

由于我是通过ASP页面提交的,我试图避免为每个值编写一个插入行。我以前有过超过20,000个值。

显然,上述代码失败了,因为在第一和第三个插入中,每个逗号表示SQL的一列。在第二和第四个插入中,它是不正确的语法,附近有“,”。

我已经构建了更复杂的查询,但由于某种原因,我无法理解这个简单的插入。

我并不是要将整个字符串插入到一个字段中。我试图将一个包含五个数字的字符串放入5行中。所以425020,547538,548029,548853,552373应该被插入表格中:

+--Number6--+
|  425020   |
|  547538   |
|  548029   |
|  548853   |
|  552373   |

0
0 Comments

问题的原因是SQL将逗号视为值之间的分隔符。所以123,456表示两个值,而不是一个字符串。

解决方法是将原来的语句修改为将所有值作为一个字符串插入:

INSERT INTO MYDB.dbo.MYTABLE (Number6) VALUES ('425020,547538,548029,548853,552373');

不过我很好奇为什么你想要将逗号分隔的字符串插入到单个字段中,这可能是一个糟糕的设计决策,但我假设你有充分的理由...

编辑

好的,你稍微改变了问题。如果你有一个包含多个值的文本框,想要将它们作为多个行插入到表中,最简单的方法是使用string.split将逗号分隔的列表转换为数组,然后可以遍历数组的元素逐个插入。

我无法在此评论中找到如何使用代码块,所以我编辑了原帖回答你的问题。

0
0 Comments

问题的原因是在ASP代码中,作者将文本框的值写入了两个不同的文本文件中。然后,作者通过将每个文件的数据读入到各自的表中,并将这两个表的数据合并到一个新表中来解决问题。最后,作者将这段代码放入了一个INSERT RECORD的ASP代码中。

解决方法是使用SQL的BULK INSERT命令将文本文件的数据导入到数据库表中,并使用CTE(公共表表达式)将两个表的数据合并到一个新表中。最后,通过ASP代码将这段SQL代码作为INSERT RECORD的一部分执行。

以下是整理后的文章:

在ASP代码中,作者将文本框的值写入了两个不同的文本文件中。为了解决问题,作者通过将每个文件的数据读入到各自的表中,并将这两个表的数据合并到一个新表中来实现。下面是作者使用的SQL代码:

--Drop Tables in case they exist, Re-create them, import data from text file
DROP TABLE Table1
CREATE TABLE dbo.Table1 (NUMBER VARCHAR(16)) 
BULK INSERT dbo.Table1
FROM 'c:\install\Test1.txt' 
WITH (FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n');
DROP TABLE Table2
CREATE TABLE dbo.Table2 (BIN VARCHAR(6)) 
BULK INSERT dbo.Table2
FROM 'c:\install\Test2.txt' 
WITH (FIELDTERMINATOR = '\t',ROWTERMINATOR = '\n');
--Prepare Table3 for merge of other two tables 
DROP TABLE Table3
CREATE TABLE dbo.TEMP (NUMBER VARCHAR(16), BIN VARCHAR(6));
--Combine Table1 with Table2 into Table3 (They called this a CTE)
WITH C1 AS
(SELECT ROW_NUMBER() OVER (ORDER BY dbo.Table1.NUMBER) AS Rn1,NUMBER FROM dbo.Table1),
C2 AS
(SELECT ROW_NUMBER() OVER (ORDER BY dbo.Table2.BIN) AS 
Rn2,BIN FROM dbo.Table2) 
INSERT INTO dbo.Table3 SELECT C1.NUMBER,C2.BIN FROM C1 INNER JOIN C2 ON C1.Rn1 = C2.Rn2;

作者将这段代码放入了一个INSERT RECORD的ASP代码中。通过执行这段代码,作者成功解决了问题。

虽然作者没有提供获取值并将其放入values变量中的代码,但是问题已经得到了解决,这对作者来说是最重要的。

0