1. deallocate,server中查询所有表的创建和修改时间?
这个存储过程将列出数据库的所有表的创建时间:
Create proc usp_alldatabases
as
begin
declare @script as nvarchar(2000)
if exists(select 1 from sysobjects where name='tab_alltables') drop table tab_alltables
create table tab_alltables (db nvarchar(1000), tab nvarchar(1000),cdate datetime)
declare c cursor for
select 'insert into tab_alltables (tab,db,cdate) select name,'''+name+ ''',crdate from ' +name+'..sysobjects where xtype=''u''' from master..sysdatabases where dbid>4
open c
fetch c into @script
while @@fetch_status=0
begin
exec (@script)
print @script
fetch c into @script
end
close c deallocate c
select * from tab_alltables --You can add your criteria here to serach for a particular table name
end
这个SP将产生三列:
1) db: 数据库名称
2) tab : 表名称
3) cdate: 表的创建时间
转
2. OraclePLSQL在游标中用while循环为什么没有结果输出?
@@fetch_status=0 是游标提取数据失败,即数据提取结束到最后了。游标主要作用是,操作SQL查询结果集。以下为典型游标的应用:
create proc cursorTest@_id int=0,@_name varchar(50)=''as--创建游标declare @cursor cursor--设定游标欲操作的数据集set @cursor=cursor forselect _id,_name from usersopen @cursor--打开游标fetch next from @cursor into @_id,@_name--移动游标指向到第一条数据,提取第一条数据存放在变量中while(@@fetch_status=0)begin--如果上一次操作成功则继续循环print @_name--操作提出的数据fetch next from @cursor into @_id,@_name--继续提下一行endclose @cursor--关闭游标deallocate @cursor--删除游标
3. 怎样用SQL查询一个表的所有字段?
--写好了,你把“除外的字段”还有“表名”都填写好。declare @name varchar(100)
declare @SQL varchar(1000)
SET @sql='select '
DECLARE C11 CURSOR FOR
select name from syscolumns where id=
(select max(id) from sysobjects where xtype='u' and name='表名')
and name <> '除外的字段'
OPEN C11
FETCH NEXT FROM C11 INTO
@name
IF @@FETCH_STATUS <> 0
BEGIN
DEALLOCATE C11
RETURN
END
WHILE(@@FETCH_STATUS = 0)
BEGIN
SET @sql=@sql+@name+','
FETCH NEXT FROM C11 INTO
@name
END
DEALLOCATE C11
set @sql=substring(@sql,1,len(@sql)-1)+' from 表名'
exec (@sql)
4. sqlserver游标的使用方法?
在SQL Server中,游标用于逐行扫描和处理查询结果集合中的数据。使用游标的主要步骤如下:
1. 定义游标:使用DECLARE CURSOR语句来定义一个游标,指定结果集的查询语句。格式为:
DECLARE CURSOR cursor_name CURSOR FOR select_statement
例如:
DECLARE mycursor CURSOR FOR SELECT * FROM products
2. 打开游标:使用OPEN语句来打开一个游标,格式为:OPEN cursor_name
例如:OPEN mycursor
3. 使用FETCH语句获取游标中的下一行,并将数据存储在本地变量中。格式为:
FETCH NEXT FROM cursor_name INTO var1, var2...varn
例如:FETCH NEXT FROM mycursor INTO @p_id, @p_name, @p_price
4. 使用CLOSE语句关闭一个打开的游标。格式为:CLOSE cursor_name
例如:CLOSE mycursor
5. 可选:使用DEALLOCATE语句释放游标所占用的资源。格式为:DEALLOCATE CURSOR cursor_name
例如:DEALLOCATE mycursor
6. 使用WHILE循环来循环读取游标中的数据,直到游标为空。
例如:
OPEN mycursor
FETCH NEXT FROM mycursor INTO @p_id, @p_name, @p_price
WHILE @@FETCH_STATUS = 0
BEGIN
-- do something
FETCH NEXT FROM mycursor INTO @p_id, @p_name, @p_price
END
CLOSE mycursor
所以,使用游标的基本步骤就是:声明游标、打开游标、使用FETCH语句逐行获取数据、循环读取直到末尾、关闭游标。通过游标可以实现对数据集的灵活处理和控制。
5. oracle提示子程序或游标引用超出范围?
oracle的变量,游标定义,都是在begin前 oracle里没有deallocate splitCur; 。。。很多问题
6. SQL游标的使用?
例子table1结构如下id intname varchar(50)declare @id intdeclare @name varchar(50)declare cursor1 cursor for --定义游标cursor1select * from table1 --使用游标的对象(跟据需要填入select文)open cursor1 --打开游标fetch next from cursor1 into @id,@name --将游标向下移1行,获取的数据放入之前定义的变量@id,@name中while @@fetch_status=0 --判断是否成功获取数据beginupdate table1 set name=name+'1'where id=@id --进行相应处理(跟据需要填入SQL文)fetch next from cursor1 into @id,@name --将游标向下移1行endclose cursor1 --关闭游标deallocate cursor1