SQL Server 中没有数组类型,用varchar 代替吧
解决方案 »
- DataGridView中的Combobox列的问题
- 求教如何设计类?
- 关于捕捉编辑状态下DataGridView的回车键问题
- 关于ArrayList 里面存放对象(比如:ArrayList )后的访问操作的问题
- 问一下那句话怎么说来着什么“高XXXXXXX,低XXXXXXX”
- VS C# 2005如何获得启动参数?
- 再问,关于软件设计时的各层次以及模块.
- 高分,VS2005中如何使用Office的语音识别功能?
- 链接
- 速求Ghost的CD-Key,Thank!
- 怎样在DotNet Framework中实现对象安全接口(IObjectSafety)
- c#如何把excel表里的数据倒入sqlserver2000数据库?
传入一个大的string 用 ;分割在存储过程中 split(;)
分开或者写成多个的小存储过程
一个insert 对应一个存储过程
便于维护
你在客户端将内容组成“strValue|strValue1|strValue2|...",然后传入存储过程后,在存储过程中调用这个函数,@intPara为0是求出有值的总个数,如果为1就是第一个值
CREATE FUNCTION getValues
(
@strPara nvarchar(4000),
@intPara integer
)
RETURNS nvarchar(200) AS
BEGIN
declare @intCount int
declare @intTemp int
declare @strTemp nvarchar(1)
declare @strCount nvarchar(500)
declare @strReturn nvarchar(200)
declare @intLenth int
--ini
set @intTemp=0
set @strCount=''
set @strReturn=''
set @intLenth=0
--int end
if @intPara=0
begin
set @intCount=len(@strPara )
if @intCount>0 --取得值域数量
begin
set @intTemp=0
WHILE @intTemp<>@intCount BEGIN
set @intTemp=@intTemp+1
set @strTemp=substring(@strPara,@intTemp,1) if @strTemp='|'
begin
set @intLenth=@intLenth+1
end
end
end
set @strReturn=@intLenth
end
else
begin set @intCount=len(@strPara)
if @intCount>0 --按域取值
begin
set @intTemp=0
WHILE @intTemp<>@intCount
begin
set @intTemp=@intTemp+1
set @strTemp=substring(@strPara,@intTemp,1) if @strTemp='|'
begin
set @intLenth=@intLenth+1
if @intLenth=@intPara
begin
set @strReturn=@strCount
set @strCount=''
break
end
else
begin
set @strCount=''
end
end
else
begin
set @strCount=@strCount+@strTemp
end
end
end end
if @strReturn=''
begin
set @strReturn=null
end
return @strReturn
END
先取总数
set @intTemp=4 --每四个一组做循环
set @intLenth=dbo.getValues(@strValues,0) --总数
set @strValue=dbo.getValues(@strValues,1) --取第一个值while @intTemp< @intLenth
begin
set @aaa=dbo.getValues(@strValues,@intTemp)
set @Colum1=dbo.getValues(@strValues,@intTemp+1)
set @Colum2=dbo.getValues(@strValues,@intTemp+2)
set @intTemp=@intTemp+3
insert into tab1 values(@aaa,@Colum1,@Colum2)
end