studio连接你的数据库用c#代码来完成这个活。你可以直接在查询分析器了试一下这个语句,你具体的意思我也不太清楚,循环就要用游标了,其实也可以实现
create table a (id int,cno char(10))
insert a values(1,'999')
insert a values(2,'1000')
create table b (id int)
insert b values(1)
insert b values(3)
insert b values(5)
declare @max int
select @max=max(cast(cno as int)) + 1 from a
declare @sql nvarchar(2000)
set @sql = 'create table #temp (id int, cno int identity('+cast(@max as nvarchar) +',1)) '
set @sql = @sql + 'insert #temp select id from b where id not in(select id from a) '
set @sql = @sql + 'insert a select id,cast(cno as nvarchar) from #temp'
exec sp_executesql @sql
select from a
drop table a,b可以通过函数递归调用来实现。
写一个sql
server的聚合函数,该函数传入一个parent_id,然后在里面通过查询该父级下的子级,然后再一次递归调用该函数,而参数是本次的子级。循环使用WHILE
比如
DECLARE @I INT
SET @I=0
WHILE @I<10
BEGIN
PRINT @I
SET @I=@I+1
END
跳出循环有主要有2种
BREAK和RETURN
比如
DECLARE @I INT
SET @I=0
WHILE @I<10
BEGIN
PRINT @I
BREAK
END
这样就跳出循环了,也可以换成RETURN,RETURN会结束整个批查询的执行,BREAK仅仅跳出循环,继续执行后边的语句。如果数据库中已经存在test表则,将其drop掉,
if exists (select from dboSysobjects where id='test' and OBJECTPROPERTY(OBJECT_ID('test'),'IsTable')=1 )
drop table test
--新建数据库
create table test
(
id int
)
declare @i int,@num int --定义变量用来存储循环初始值和结束值
select @i=1,@num=1000
while (@i<=@num) ---进入循环
begin
insert into test values(@i)
select @i+=1
end
select from test
drop table test --删除实体表,如果程序真用则就不要删除了!SQL循环表中数据用游标,以下语句为SQL
SERVER:
--定义游标
DECLARE
my_Cur
CURSOR
FOR
SELECT
A1,A2,A3
FROM
A
--打开游标
OPEN
my_Cur
--游标滚到下一行
FETCH
NEXT
FROM
my_Cur
--循环直到游标逐行读取完数据
WHILE
@@FETCH_STATUS
=
0
BEGIN
/
--这里做你想做的事情
/
--游标滚到下一行
FETCH
NEXT
FROM
my_Cur
END
--关闭游标
CLOSE
my_Cur
--释放资源
DEALLOCATE
my_Cur
----
PS:详细可以查看F1,里面有更多例子和说明
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)