在sqlserver 数据库中,循环语句是最常用的语句之一,下面就将为您分析SQL循环语句的例子,供您参考,希望对您有所启迪。
SQL循环语句
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
--------------------------
while 条件
begin
执行操作
set @i=@i+1
end
WHILE
设置重复执行SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用BREAK 和CONTINUE 关键字在循环内部控制WHILE 循环中语句的执行。
语法
WHILE Boolean_expression
{ sql_statement | statement_block }
[ BREAK ]
{ sql_statement | statement_block }
[ CONTINUE ]
参数
Boolean_expression
返回TRUE 或FALSE 的表达式。如果布尔表达式中含有SELECT 语句,必须用圆括号将SELECT 语句括起来。
{sql_statement | statement_block}
Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字BEGIN 和END。
BREAK
导致从最内层的WHILE 循环中退出。将执行出现在END 关键字后面的任何语句,END 关键字为循环结束标记。
CONTINUE
使WHILE 循环重新开始执行,忽略CONTINUE 关键字后的任何语句。
注释
如果嵌套了两个或多个WHILE 循环,内层的BREAK 将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。
示例
A. 在嵌套的IF...ELSE 和WHILE 中使用BREAK 和CONTINUE
在下例中,如果平均价格少于$30,WHILE 循环就将价格加倍,然后选择最高价。如果最
高价少于或等于$50,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过$50,然后退出WHILE 循环并打印一条消息。
USE pubs
GO
WHILE (SELECT A VG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
PRINT 'Too much for the market to bear'
B. 在带有游标的过程中使用WHILE
以下的WHILE 结构是名为count_all_rows 过程中的一部分。下例中,该WHILE 结构测试用于游标的函数@@FETCH_STATUS 的返回值。因为@@FETCH_STA TUS 可能返回–2、-1 或0,所以,所有的情况都应进行测试。如果某一行在开始执行此存储过程以后从游标结果中删除,将跳过该行。成功提取(0) 后将执行BEGIN...END 循环内部的SELECT 语句。
USE pubs
DECLARE tnames_cursor CURSOR
FOR
SELECT TABLE_NAME
FROM INFORMA TION_SCHEMA.TABLES
OPEN tnames_cursor
DECLARE @tablename sysname
--SET @tablename = 'authors'
FETCH NEXT FROM tnames_cursor INTO @tablename
WHILE (@@FETCH_STA TUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
SELECT @tablename = RTRIM(@tablename)
EXEC ('SELECT ''' + @tablename + ''' = count(*) FROM '
+ @tablename )
PRINT ' '
END
FETCH NEXT FROM tnames_cursor INTO @tablename
END
CLOSE tnames_cursor
DEALLOCATE tnames_cursor
===================================================
可以用变量的形式来增加,不过你的userid 三位显然不够,因为你要加10000数据,所以要和authnum形式一样,5位才够
下面是一个简单的例子,你可以根据实际需求来改一下。
DECLARE @i int
DECLARE @strUserId varchar(10)
DECLARE @strAuthnum varchar(10)
Set @i = 0
WHILE @i < 10000
BEGIN
Set @i =@i +1
SET @strUserId = RIGHT('00000' + CAST(@i AS varchar(10)),5)
SET @strAuthnum = @strUserId
insert into user_info values(@strUserId,@strAuthnum)
END
(注:文档可能无法思考全面,请浏览后下载,供参考。可复制、编制,期待你的好评与关注)