『壹』 sql臨時表表變數的使用方法與什麼時候用最好
臨時表、表變數的比較
1、臨時表
臨時表包括:以#開頭的局部臨時表,以##開頭的全局臨時表。
a、存儲
不管是局部臨時表,還是全局臨時表,都會放存放在tempdb資料庫中。
b、作用域
局部臨時表:對當前連接有效,只在創建它的存儲過度、批處理、動態語句中有效,類似於C語言中局部變數的作用域。
全局臨時表:在所有連接對它都結束引用時,會被刪除,對創建者來說,斷開連接就是結束引用;對非創建者,不再引用就是結束引用。
但最好在用完後,就通過drop table 語句刪除,及時釋放資源。
c、特性
與普通的表一樣,能定義約束,能創建索引,最關鍵的是有數據分布的統計信息,這樣有利於優化器做出正確的執行計劃,但同時它的開銷和普通的表一樣,一般適合數據量較大的情況。
有一個非常方便的select ... into 的用法,這也是一個特點。
2、表變數
a、存儲
表變數存放在tempdb資料庫中。
b、作用域
和普通的變數一樣,在定義表變數的存儲過程、批處理、動態語句、函數結束時,會自動清除。
c、特性
可以有主鍵,但不能直接創建索引,也沒有任何數據的統計信息。表變數適合數據量相對較小的情況。
必須要注意的是,表變數不受事務的約束,
『貳』 sql中怎麼放臨時變數
我提供一個演示例子吧。
select curdate() into @today;
select @today;
『叄』 SQL中,如何使用臨時變數
select a-b as c from tableA
這個我建議你看一下PL/SQL編程
『肆』 sql server 存儲過程中使用循環,需要定義臨時變數a(@i),0<@i<15.請問該怎麼定義它。
DECLARE @i INT
DECLARE @a1 INT
DECLARE @a2 INT
DECLARE @a3 INT
SET @i=1
SET @a1=0
SET @a2=0
SET @a3=0
CREATE TABLE #t1(
a1 INT,
a2 INT,
a3 int
)
WHILE @i<10
BEGIN
SET @a1 = 2*@i + 1
SET @a2 = @i +3 +@a1
SET @a3 = 3*@i +5 + @a2
INSERT INTO #t1(a1,a2,a3) VALUES(@a1,@a2,@a3)
SET @i +=1
end
SELECT * FROM #t1
『伍』 如何在存儲過程定義一個臨時變數
SQL 聲明變數,declare @Tnvarhcar(20)
SQL 存儲過程如下:
create PROCEDURE [dbo].[Test]
AS
BEGIN
declare @T nvarchar(50)
set @T='abc'
select @T
return 0
END@T 代表臨時變數,存儲過程執行完成,變數結束。
『陸』 SQL資料庫中臨時表,臨時變數和with as關鍵詞創建「臨時表」的區別
》臨時表:物理上存在的,使用時與正式表無差別;只是在會話結束時,DBy引擎會將它自動刪除;
》臨時變數:形式上是個變數,而不是表;同樣是在會話中有效;會話結束,就消失;
》WITH ... AS是公共表達式(CTE)的語法表示,它只是邏輯概念,沒有物理對象。
一個類似情況就是View(相對於Table),沒有物理對象。
但View至少還有定義存貯在DB系統表中,而CTE只是一種語法表示(僅在執行時才會被解析、翻譯)。
『柒』 sql結果集臨時變數
一條語句就解決..select LogDate, max(value) from Mth_DayLog where LogDate between '2014-03-02 00:00:00.000' and '2014-03-31 00:00:00.000';
『捌』 SQL中變數的種類及表現形式
分類: 電腦/網路 >> 程序設計 >> 其他編程語言
問題描述:
拜託路過的各位高手,這個是我考試的題目,麻煩告訴我答案.謝謝~~
解析:
MS SQL Server中的變數- -
在SQL中,我們常常使用臨時表來存儲臨時結果,對於結果是一個 *** 的情況,這種方法非常實用,但當結果僅僅是一個數據或者是幾個數據時,還要去建一個表,顯得就比較麻煩,另外,當一個SQL語句中的某些元素經常變化時,比如選擇條件,(至少我想)應該使用局部變數。當然MS SQL Server的全局變數也很有用。
>>>>局部變數
聲明:DECLARE @local_variable data_type
@local_variable 是變數的名稱。變數名必須以 at 符 (@) 開頭。data_type 是任何由系統提供的或用戶定義的數據類型。變數不能是 text、ntext 或 image 數據類型。
示例:
use master
declare @SEL_TYPE char(2)
declare @SEL_CUNT numeric(10)
set @SEL_TYPE = 'U'/*user table*/
set @SEL_CUNT = 10
/*返回系統中用戶表的數目*/
select @SEL_CUNT = COUNT(*)
from sysobjects
where type = @SEL_TYPE
select @SEL_CUNT as 'User table ''s count'
如果要返回系統表的數目,可以用set @SEL_TYPE = 'S'
可能這個例子並不能說明使用變數的好處,我只是想說明使用方法。當一組(幾個甚至幾十個)SQL語句都使用某個變數時,就能體會到他的好處了。
>>>>全局變數
全局變數是系統預定義的,返回一些系統信息,全局變數以兩個at(@)開頭。下面是我統計了一些較為常用的變數。
@@CONNECTIONS
返回自上次啟動以來連接或試圖連接的次數。
@@CURSOR_ROWS
返回連接上最後打開的游標中當前存在的合格行的數量。
@@DATEFIRST
返回每周第一天的數字
@@ERROR
返回最後執行的SQL 語句的錯誤代碼。
@@FETCH_STATUS
返回被 FETCH 語句執行的最後游標的狀態,而不是任何當前被連接打開的游標的狀態。
@@IDENTITY
返回最後插入的標識值
@@LANGID
返回當前所使用語言的本地語言標識符(ID)。
@@LANGUAGE
返回當前使用的語言名。
@@LOCK_TIMEOUT
返回當前會話的當前鎖超時設置,單位為毫秒。
@@PROCID
返回當前過程的存儲過程標識符 (ID) 。
@@ROWCOUNT
返回受上一語句影響的行數。
@@SERVERNAME
返回運行 的本地伺服器名稱。
@@SPID
返回當前用戶進程的伺服器進程標識符 (ID)。
@@TRANCOUNT
返回當前連接的活動事務數。
@@VERSION
返回當前安裝的日期、版本和處理器類型。
『玖』 SQL資料庫中臨時表,臨時變數和with as關鍵詞創建「臨時表」的區別
SQL資料庫中數據處理時,有時候需要建立臨時表,將查詢後的結果集放到臨時表中,然後在針對這個數據進行操作。
創建「臨時表」(邏輯上的臨時表,可能不一定是資料庫的)的方法有一下幾種:
1.with tempTableName as方法(05之後出現):
with temptable as 其實並沒有建立臨時表,只是子查詢部分(subquery factoring),定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供數據的部分。特別對於UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,所以可以使用WITH AS短語,則只要執行一遍即可。
http://www.cnblogs.com/zhaowei303/articles/4204805.html
『拾』 SQl 裡面 我把 SQl查詢語句寫在一個臨時變數裡面,我該如何調用該變數來執行查詢
set@SQL=('select * from '+@TableName+' where BatCode='+@batcode)
改為
set @SQL=('select * from '+@TableName+' where BatCode='''+@batcode+'''')
BatCode 應該是字元串類型。