简单 SQL 服务器插入 - 从文本框到一列的许多逗号分隔值

Simple SQL Server Insert - Many Comma Delimited Values from Textbox to ONE Column

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

像这样:

425020,547538,548029,548853,552373

这两种方法我都做过。一个 table 有两列,|Number6|Number16| ... 还有一个只有一列 |Number6|为了尝试消除任何混淆。对于下面的内容,他们 运行 反对一列 table.

以下是我尝试过的四种方法:

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 应该进入 table 为:

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

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

要解决您的问题,请更改:

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

为此:

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

我确实想知道为什么要将逗号分隔的字符串插入到单个字段中,这可能是一个糟糕的设计决定,但我认为您有充分的理由...

编辑

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

我更改了 ASP 中的代码以将文本框值写入文本文件。实际上我将两组值写入了两个单独的文本文件。

<%
function WriteToFile(FileName, Contents, Append)
on error resume next

if Append = true then
   iMode = 8
else 
   iMode = 2
end if
set oFs = server.createobject("Scripting.FileSystemObject")
set oTextFile = oFs.OpenTextFile(FileName, iMode, True)
oTextFile.Write Contents
oTextFile.Close
set oTextFile = nothing
set oFS = nothing

end function

%>
<%
WriteToFile "C:\INSTALL\Test1.txt", Response.Form("values1"), True
WriteToFile "C:\INSTALL\Test2.txt", Response.Form("values2"), True
%>

然后在 StackOverlow 的惊人帮助下,我构建了以下 SQL 查询,它将每个文件读取到它自己的 table 中,然后并排组合每个文件中的数据,就像如果我像我在这个问题中要求的那样合并它们。

--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;

我把上面的代码写成一行,塞进了ASP中的INSERT RECORD post,哇!我没有粘贴获取值并将它们放入上面的 values 变量中的代码,以防你看到它丢失了。

所以,没有解决 javascript 与 javascript 的连接问题,但它仍然已经解决,这对我来说很重要。