當前位置:首頁 » 編程語言 » sql語句fetch使用方法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql語句fetch使用方法

發布時間: 2023-03-27 20:42:50

A. sql語句怎麼逐條讀取一個表中的數據

用「游標」即可,語法如下:

delcarec1cursorfor//c1為游標名
selectafromtable

openc1
while1=1begin
fetchainto@a1//@a1是變數,這句作用是每一次都把每一行的a賦給變數@a1

if@@sqlcode=2begin//游標結束
break
end

.......//你的邏輯

end

1,INSERTINTOSELECT語句


語句形式為:InsertintoTable2(field1,field2,...)selectvalue1,value2,...fromTable1


要求目標表Table2必須存在,由於目標表Table2已經存在,所以除了插入源表Table1的欄位外,還可以插入常量。



2,SELECTINTOFROM語句


語句形式為:SELECTvale1,value2intoTable2fromTable1


要求目標表Table2不存在,因為在插入時會自動創建表Table2,並將Table1中指定欄位數據復制到Table2中。

B. sql fetch提取數據常用方法

1、查詢資料庫(test)中的所有表名的方法:

SELECT name
FROM [test]..sysobjects where xtype='U'
********
補充:
如果有的表不存在【時間】那就用下面的語句直接把含有【時間】列的表名找到:
SELECT d.name
FROM [test]..syscolumns a
inner join [test]..sysobjects d on a.id=d.id and d.xtype='U' and a.name='時間'
**********

2、遍歷這個表名取出數據插入到另外的資料庫中(SqlServer中的遍歷方法我不是很清楚,給你提供個思路,oracle的話我就能把程序寫出來了O(∩_∩)O~)。

如:遍歷結果存儲到資料庫test2中
insert into [test2]..遍歷出的表名 select * from 遍歷出的表名 where datediff(day,'2009-08-07',時間)>0;

重復上面的sql語句指導講資料庫test中的表名完全遍歷完為止。

*************************************************************
補充:我試驗了一下下面把實驗代碼給你(建一個存儲過程)
create proc test as
--定義游標變數
declare cur1 cursor for
SELECT d.name
FROM [test]..syscolumns a
inner join [test]..sysobjects d on a.id=d.id and d.xtype='U' and a.name='時間'
--定義臨時變數
declare @tmp varchar(1000)
--定義sql字元串
declare @strsql varchar(4000)
--打開游標
open cur1
--讀取第一條數據,也就是第一個表名
fetch next from cur1 into @tmp
--是讀完
while(@@fetch_status = 0)
begin
--連接sql文
set @strsql='insert into [test2]..'+@tmp++' select * from '+@tmp+' where datediff(day,'+char(39)+'2009-08-07'+char(39)+',時間)>0'
--執行這個sql
exec(@strsql)
--讀取下一條數據
fetch next from cur1 into @tmp
end
--關閉游標
close cur1
--摧毀游標所佔資源
deallocate cur1

C. SQL FETCH

FETCH (Transact-SQL)

通過 Transact-SQL 伺服器游標檢索特定行。

Transact-SQL 語法約定

語法

FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ] 參數
NEXT
緊跟當前行返回結果行,並且當前行遞增為返回行。如果 FETCH NEXT 為對游標的第一次提取操作,則返回結果集中的第一行。NEXT 為默認的游標提取選項。

PRIOR
返回緊鄰當前行前面的結果行,並且當前行遞減為返回行。如果 FETCH PRIOR 為對游標的第一次提取操作,則沒有行返回並且游標置於第一行之前。

FIRST
返回遊標中的第一行並將其作為當前行。

LAST
返回遊標中的最後一行並將其作為當前行。

ABSOLUTE { n | @nvar}
如果 n 或 @nvar 為正,則返回從游標頭開始向後的第 n 行,並將返回行變成新的當前行。如果 n 或 @nvar 為負,則返回從游標末尾開始向前的第 n 行,並將返回行變成新的當前行。如果 n 或 @nvar 為 0,則不返回行。n 必須是整數常量,並且 @nvar 的數據類型必須為 smallint、tinyint 或 int。

RELATIVE { n | @nvar}
如果 n 或 @nvar 為正,則返回從當前行開始向後的第 n 行,並將返回行變成新的當前行。如果 n 或 @nvar 為負,則返回從當前行開始向前的第 n 行,並將返回行變成新的當前行。如果 n 或 @nvar 為 0,則返回當前行。在對游標進行第一次提取時,如果在將 n 或 @nvar 設置為負數或 0 的情況下指定 FETCH RELATIVE,則不返回行。n 必須是整數常量,@nvar 的數據類型必須為 smallint、tinyint 或 int。

GLOBAL
指定 cursor_name 是指全局游標。

cursor_name
要從中進行提取的打開的游標的名稱。如果全局游標和局部游標都使用 cursor_name 作為它們的名稱,那麼指定 GLOBAL 時,cursor_name 指的是全局游標;未指定 GLOBAL 時,cursor_name 指的是局部游標。

@ cursor_variable_name
游標變數名,引用要從中進行提取操作的打開的游標。

INTO @variable_name[ ,...n]
允許將提取操作的列數據放到局部變數中。列表中的各個變數從左到右與游標結果集中的相應列相關聯。各變數的數據類型必須與相應的結果集列的數據類型匹配,或是結果集列數據類型所支持的隱式轉換。變數的數目必須與游標選擇列表中的列數一致。

備注
如果 SCROLL 選項未在 ISO 樣式的 DECLARE CURSOR 語句中指定,則 NEXT 是唯一支持的 FETCH 選項。如果在 ISO 樣式的 DECLARE CURSOR 語句中指定了 SCROLL 選項,則支持所有 FETCH 選項。

如果使用 Transact-SQL DECLARE 游標擴展插件,則應用下列規則:

如果指定了 FORWARD_ONLY 或 FAST_FORWARD,則 NEXT 是唯一受支持的 FETCH 選項。

如果未指定 DYNAMIC、FORWARD_ONLY 或 FAST_FORWARD 選項,並且指定了 KEYSET、STATIC 或 SCROLL 中的某一個,則支持所有 FETCH 選項。

DYNAMIC SCROLL 游標支持除 ABSOLUTE 以外的所有 FETCH 選項。

@@FETCH_STATUS 函數報告上一個 FETCH 語句的狀態。相同的信息記錄在由 sp_describe_cursor 返回的游標中的 fetch_status 列中。這些狀態信息應該用於在對由 FETCH 語句返回的數據進行任何操作之前,以確定這些數據的有效性。有關詳細信息,請參閱 @@FETCH_STATUS (Transact-SQL)。

許可權
FETCH 許可權默認授予任何有效的用戶。

示例
A. 在簡單的游標中使用 FETCH
以下示例為 Person.Contact 表中姓氏以字母 B 開頭的行聲明了一個簡單的游標,並使用 FETCH NEXT 逐個提取這些行。FETCH 語句以單行結果集形式返回在 DECLARE CURSOR 中指定的列的值。

復制代碼
USE AdventureWorks
GO
DECLARE contact_cursor CURSOR FOR
SELECT LastName FROM Person.Contact
WHERE LastName LIKE 'B%'
ORDER BY LastName

OPEN contact_cursor

-- Perform the first fetch.
FETCH NEXT FROM contact_cursor

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor
END

CLOSE contact_cursor
DEALLOCATE contact_cursor
GOB. 使用 FETCH 將值存入變數
以下示例與示例 A 相似,但 FETCH 語句的輸出存儲於局部變數而不是直接返回到客戶端。PRINT 語句將變數組合成單一字元串並將其返回到客戶端。

復制代碼
USE AdventureWorks
GO
-- Declare the variables to store the values returned by FETCH.
DECLARE @LastName varchar(50), @FirstName varchar(50)

DECLARE contact_cursor CURSOR FOR
SELECT LastName, FirstName FROM Person.Contact
WHERE LastName LIKE 'B%'
ORDER BY LastName, FirstName

OPEN contact_cursor

-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.

FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN

-- Concatenate and display the current values in the variables.
PRINT 'Contact Name: ' + @FirstName + ' ' + @LastName

-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName
END

CLOSE contact_cursor
DEALLOCATE contact_cursor
GOC. 聲明 SCROLL 游標並使用其他 FETCH 選項
以下示例創建一個 SCROLL 游標,使其通過 LAST、PRIOR、RELATIVE 和 ABSOLUTE 選項支持全部滾動功能。