我正在使用文件上传控制..in asp.net..首先在临时目录中存储文件,然后当用户单击保存后,我将文件从临时移动到我想要的位置。问题是我必须使用 for 循环并为我的插入查询进行 5 次访问数据库以插入 5 条记录。但我想为此编写单个查询。我知道我可以发送我的图像名称以及图像路径逗号分隔。但由于我没有足够的 sql 知识,我不知道如何在 sql 中拆分逗号分隔的文件,然后使用光标插入它们。所以我请求一些在这里给我写一个示例查询。这样我就可以继续了。
问问题
1161 次
1 回答
0
使用可以将数据集作为 xml 传递给存储过程,并且在存储过程中,您可以使用 openXML 一次性插入多行
用于将数据集对象作为 xml 传递给存储过程的 C# 代码
...................................
DataSet ds = new DataSet(); // assume dataset has records(in table object)
string xmlString = ds.GetXml();
SqlCommand cmd = new SqlCommand("your procedure name", "your Connection object");
cmd.Parameters.Add(new SqlParameter("@XmlString",xmlString);
...................................
存储过程,使用 openXML 进行批量插入
...................................
DECLARE @XMLDocPointer INT
EXEC sp_xml_preparedocument @XMLDocPointer OUTPUT, @XmlString
INSERT INTO Employee
(Name, Email, PhoneNo)
SELECT Name,Email,PhoneNo
FROM OPENXML(@XMLDocPointer,'/ROOT/DATA',2)
WITH (Name VARCHAR(50),-- '@Name',
Email VARCHAR(50),-- '@Email',
PhoneNo VARCHAR(50) --'@PhoneNo')
EXEC sp_xml_removedocument @XMLDocPointer
...................................
阅读此完整示例 http://www.codeproject.com/Articles/417181/Bulk-Insertion-of-Data-Using-Csharp-DataTable-and
==================================================== ==================
如果您在 sql 中寻找拆分字符串,那么下面是您需要在 sqlserver 中创建的 sql 函数
create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp
table(a varchar(100))
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>'\'
insert @temp values(@SourceSql)
return
end
go
以及如何打电话
select * from dbo.f_split('1,2,3,4,5',',')
然后使用光标你可以插入所有
对于拆分功能,请参阅这篇文章http://social.msdn.microsoft.com/forums/en-US/transactsql/thread/4126a010-6885-4eb0-b79c-c798c90edb85
于 2013-02-05T17:19:03.347 回答