构造一个大的SQL语句呗,Insert into wer(A1,A2A1000) Values(@a1,@a2,@a1000)。里面有1000个参数,给参数数组循环赋值,然后执行就可以了。
这个字符串,你可以用循环来生成
string Sql,param;
Sql="";param="";
for(int i=1;i<=1000;i++)
{
Sql+="A"+iToString()+",";
param+="@a"+iToString()+",";
}
Sql="Insert into wer("+SqlSubstring(0,SqlLength-1)+") Values ("+paramSubstring(0,paramLength-1));
给这个Sql的参数数组赋值,然后执行这个SQL;
不过我记得2000下面,单个SQL命令最大长度为4K字节(记得不是太清楚了,你可以自己试试看),如果有1000个字段,光写字段名就超过4K字节了。
如果SQL语句太常,就需要拆分成两条,一条插入,并返回一个id,然后根据第二条update,或者你的参数中自己就带了一个id也可以。
-- 这样写,主要是修改了IF ELSE结构,以及对b自增的位置进行了恰当的调整与优化
DECLARE @b INT,@d INT;
SET @b=1;
SET @d=0;
WHILE @b<10
BEGIN
IF (@b%2)=0
SET @d+=@b;
SET @b+=1;
END
PRINT @d;
CREAT PROCEDURE tester
AS
BEGIN
SET NOCOUNT ON;
DECLARE @userId varchar(50)
DECLARE @count int
SET @count = 0
SELECT @count = count() FROM UserService_User WHERE Account like '%111%'
WHILE @count > 0
BEGIN
SELECT @userId = Id FROM UserService_User WHERE Account like '%111%'
exec UserService_RemoveUserByUserId @userId
SET @count = @count -1
END
END
说明:
1、此存储过程在SQL SERVER 2005上测试通过,值得注意的是,循环体中,语句是使用BEGIN……END包括的,而不是网络上常说的WHILE ……END WHILE结构,其他的循环语句,如LOOP ……UNTIL……END LOOP也不能通过编译,也许是版本的问题,但在SQL SERVER2005中,循环体使用BEGIN……END就可以,而不能使用网络上常说的WHILE ……END WHILE结构。
2、循环体中 UserService_RemoveUserByUserId 是一个存储过程的名称,@userId为该存储过程的参数,如果有多个参数,使用“,”分开就可以了,这也是存储过程调用另一个存储过程的一种方法。
以上就是关于如何用数组向SQL中输入数据全部的内容,包括:如何用数组向SQL中输入数据、sql循环中不能赋值、SQL利用循环语句插入数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)