游标是sql中效率最低的,尽量不要使用游标,如果你的参数名可以自己定义的话就好办了,比如,@test1,@test2......@test10,定义成有规律的,那么可以通过拼参数名的方式
创新互联专业IDC数据服务器托管提供商,专业提供成都服务器托管,服务器租用,成都移动服务器托管,成都移动服务器托管,成都多线服务器托管等服务器托管服务。
set @sql='update dbo.KY_ProjectResult set state=1 where Project_Result_ID='+‘@test’+cast((11-@count) as char(10))
动态的把你的sql拼出来,然后用exec()调用。
例如:
declare @str varchar(1000);
select @str='create table ttt(id1 int,id2 int,id3 int.....);'
exec(@str);
************
补充:
************
1、建一个表,保存你要追加的字段名和字段类型
如:create table t_tmp(id int IDENTITY(1,1) not null,col_name varchar(100),col_type varchar(100));
2、把你想要动态追加的字段和类型全写入表中
如:
insert into t_tmp(col_name,col_type) values('t1','int');
insert into t_tmp(col_name,col_type) values('t2','date');
insert into t_tmp(col_name,col_type) values('t3','varchar(100)');
insert into t_tmp(col_name,col_type) values('t4','char(100)');
3、生成动态建表语句,并创建表
declare @str varchar(2000)
set @str='create table ttt('
select @str=@str + col_name+' '+col_type+',' from t_tmp
set @str=substring(@str,1,len(@str)-1)+')'
select @str
exec(@str)
---
以上,希望对你有所帮助。
正常循环有两类循环,普通循环和游标循环
普通循环:while,for ,WHILE LOOP
游标循环:针对你select出来的值进行循环
除了上述那些还有复活形的多游标,嵌套循环等。
使用游标,如下
CREATE PROCEDURE proc_getalltable
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tablename VARCHAR(100),@sql VARCHAR(1000)
DECLARE tablename CURSOR FOR SELECT tname FROM tablelist
OPEN tablename
FETCH NEXT FROM tablename INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sql = 'SELECT * FROM ' + @tablename
EXEC(@sql)
FETCH NEXT FROM tablename INTO @tablename
END
CLOSE tablename
DEALLOCATE tablename
END
GO