一個Selcet語句獲取到一個結果集,如果我們要遍歷結果集,根據每一行不同的數據進行一些增刪改查或賦值等操作(常用於存儲過程),可以使用遊標遍歷。
以下例子是遍歷一個表的字段名並拼接SQL實現等同於Selcet * from ‘表名’ 的效果。
declare @tabelName varchar(1000)
declare @list varchar(1000)
declare @name varchar(1000)
Set @tabelName = 'SYS_Programme_Fuction' --要查詢的表名
Set @list = '' -- 必須初始化
-- 聲明遊標
DECLARE C_Employees CURSOR FAST_FORWARD FOR
--要進行循環的結果集(根據實際修改查詢語句)
select b.name from sysobjects a,syscolumns b where a.id=b.id and a.name = @tabelName
OPEN C_Employees;
-- 取第一條記錄,由於上面的查詢只有一個字段name,如果有多個字段,需定義多個變量
FETCH NEXT FROM C_Employees INTO @name;
WHILE @@FETCH_STATUS=0
BEGIN
--要進行的操作(根據實際修改)
Set @list = @list + ',' + @name
-- 取下一條記錄
FETCH NEXT FROM C_Employees INTO @name;
END
-- 關閉遊標
CLOSE C_Employees;
-- 釋放遊標
DEALLOCATE C_Employees;
declare @sql nvarchar(1000)
set @sql='select '+right(@list,len(@list)-1)+' from ' + @tabelName
exec (@sql)