简单SQL Server插入-从文本框到ONE列的许多逗号分隔值



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

像这样:

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页面提交的,所以我尽量避免为每个值写一个插入行。我以前有超过20000个值。

显然,上面的代码失败了,因为在第一个和第三个插入中,每个逗号都指示SQL的一列。在第二个和第四个插入中,附近的语法不正确

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

我并没有试图将整个字符串插入到一个字段中。我试着取一个有五个数字的字符串,把它们放在五行中。所以425020,547538,548029,548853,552373应该作为:进入表格

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

SQL将逗号视为值之间的分隔符。因此,123456表示两个值,而不是一个字符串。

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

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

到此:

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

我很想知道你为什么要在一个字段中插入逗号分隔的字符串,这可能是一个糟糕的设计决定,但我认为你有充分的理由。。。

编辑

好的,所以你把问题改了一点。如果你有一个包含多个值的文本框,你想将其作为多行插入表中,最简单的方法就是使用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:INSTALLTest1.txt", Response.Form("values1"), True
WriteToFile "C:INSTALLTest2.txt", Response.Form("values2"), True
%>

然后,在StackOverlow的惊人帮助下,我构建了以下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:installTest1.txt' 
WITH (FIELDTERMINATOR = 't', ROWTERMINATOR = 'n');
DROP TABLE Table2
CREATE TABLE dbo.Table2 (BIN VARCHAR(6)) 
BULK INSERT dbo.Table2
FROM 'c:installTest2.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帖子中,woot!我没有粘贴获取值的代码,并将它们放入上面的值变量中,以防您看到缺少这些值。

所以,没有用javascript解决javascript连接问题,但它仍然得到了解决,这对我来说很重要。

相关内容

  • 没有找到相关文章

最新更新