sql – ‘insert into’with array
|
我想知道是否有办法在值列表中使用’insert into’.我正在尝试这样做: insert into tblMyTable (Col1,Col2,Col3)
values('value1',value2,'value3')
所以,我想说的是value2将是一个字符串数组.我将把它放在C#中,但SQL语句是我真正需要的.我知道我可以使用foreach并循环遍历我的数组,但我认为可能有更好的方式类似于SELECT语句:SQL SELECT * FROM XXX WHERE columnName in Array.看起来单个查询比一次查询效率更高. 我正在使用SQL Server 2008 R2.谢谢fellas! 解决方法您可以使用此类型的insert语句insert into tblMyTable (Col1,Col3)
select 'value1',value,'value3'
from dbo.values2table('abc,def,ghi,jkl',',-1) V
‘value’,’value3’和’abc,jkl’是您需要在C#SQLCommand中设置的3个varchar参数. 这是所需的支持功能. CREATE function dbo.values2table
(
@values varchar(max),@separator varchar(3),@limit int -- set to -1 for no limit
) returns @res table (id int identity,[value] varchar(max))
as
begin
declare @value varchar(50)
declare @commapos int,@lastpos int
set @commapos = 0
select @lastpos = @commapos,@commapos = charindex(@separator,@values,@lastpos+1)
while @commapos > @lastpos and @limit <> 0
begin
select @value = substring(@values,@lastpos+1,@commapos-@lastpos-1)
if @value <> '' begin
insert into @res select ltrim(rtrim(@value))
set @limit = @limit-1
end
select @lastpos = @commapos,@lastpos+1)
end
select @value = substring(@values,len(@values))
if @value <> '' insert into @res select ltrim(rtrim(@value))
return
end
GO
使用的参数是: >’,’=分隔符 解决方案如上,替代方案如下 或者,如果您喜欢,纯粹的CTE方法没有任何拆分功能支持(使用<<<<<< ;WITH T(value,delim) AS (
select 'abc,ghi',' --- <<< plug in the value array and delimiter here
),CTE(ItemData,Seq,I,J) AS (
SELECT
convert(varchar(max),null),CharIndex(delim,value)+1,1--case left(value,1) when ' ' then 2 else 1 end
FROM T
UNION ALL
SELECT
convert(varchar(max),subString(value,J,I-J-1)),Seq+1,I)+1,I
FROM CTE,T
WHERE I > 1 AND J > 0
UNION ALL
SELECT
SubString(value,2000),0
FROM CTE,T
WHERE I = 1 AND J > 1
)
--- <<< the final insert statement
insert into tblMyTable (Col1,Col3)
SELECT 'value1',ItemData,'value3'
FROM CTE
WHERE Seq>0
XML方法 -- take an XML param
declare @xml xml
set @xml = '<root><item>abc</item><item>def</item><item>ghi</item></root>'
insert into tblMyTable (Col1,n.c.value('.','varchar(max)'),'value3'
FROM @xml.nodes('/root/item') n(c)
-- heck,start with xml string
declare @xmlstr nvarchar(max)
set @xmlstr = '<root><item>abc</item><item>def</item><item>ghi</item></root>'
insert tblMyTable (Col1,'value3'
FROM (select convert(xml,@xmlstr) x) y
cross apply y.x.nodes('/root/item') n(c)
在C#代码中,您只能使用以“insert tblMyTable …”开头的4行并参数化@xmlstr变量. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sqlserver 中一些常看的指标和清除缓存的方法
- 为什么l.insert(0,i)比python中的l.append(i)慢?
- 数据库设计 – 当人们有多个工作岗位时,使用人员,职位和团队
- sql – 如何复制记录,只更改id?
- .net – string1 = string2在Linq to SQL中没有实现,任何wo
- sql-server – 为SSRS复制数据库的最佳方法是什么
- 数据库 – Access 2007 – 2010可以使用哪些ORM?我是在WPF
- sql – 提高非聚集索引查找的性能
- user-interface – 为阿拉伯语发音者镜像_entire_用户界面有
- 用于搜索具有无限数量的位字段的表的SQL设计方法
