當前位置:首頁 » 編程語言 » sql2008表變數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql2008表變數

發布時間: 2023-03-16 12:46:38

sql server 2008 表值參數在哪

SQL SERVERE 2008 新穎之處在於表值參數(TVPS)。基本思想是數據表可以在客戶端應用程序
或者T-SQL 中創建並填充。然後作力一個數據表變數傳遞到存儲過程 或者由用戶自定義的函數中。
這並不是一件要有可無的事情。
DEMO:

//訂單表
CREATE TABLE dbo.Orders(
OrderId INT NOT NULL IDENTITY CONSTRAINT ORDERSPK PRIMARY KEY,
OrderDate DATETIME,
CustomerID INT
)
//訂單明細表
CREATE TABLE dbo.OrderDetails(
OrderId INT NOT NULL CONSTRAINT orderdetailFkOrders REFERENCES Orders,
LineNumber SMALLINT NOT NULL,
ProctID INT
)

---數據表類型
CREATE TYPE OrderDetailsType as TABLE
(
LineNumber INT,
ProctID INT,
IsNew BIT,
IsDirty BIT,
IsDeleted BIT
)

❷ 在SQL Server 2008 R2中SSIS怎麼傳表名變數

一、SSIS變數簡介

SSIS(SQL Server Integration Services,SQL Server整合服務)變數分寬察局分為兩種,一種是系統變數,一種用戶定義的變數。系統變數包括有關包、容沒畝器、任務或事件處理程序的非常有用的信息。例如,在運行時,MachineName系統變數包含運行包含的計算機的名稱,StartTime變數包開始運行的時間。系統變數是只讀的。在SSIS中,用戶變數是用戶在開發的過程中根據需要申明的變數。用戶變數可以使用在腳本中,在由優先約束、For循環容器、派生列轉換和條件性拆分轉換使用的表達式中,以及在更新屬性值的屬性表達式中。

在各種編程語言中申明的變數一般情況下都會有作用范圍的,SSIS變數也不例外,SSIS變數也是有作用范圍的。根據作用范圍分類,變數分為包變數和組件變數。包變數在包任何一個組件中都可以調用,組件變數只能夠在聲明變數的組件中有效。在變數的窗口中可以看到變數的作用域。

可以看到i變數的作用域是整個Package1包,而myconfig變數作用域是數據流任務組件。

二、SSIS用戶變數的聲明、賦值、使用

1、申明變數

申明變數是非常簡單、如果你要申明包變數,只要單擊控制流選項卡,然後在包開發區域空白處單擊右鍵選擇變數命令,或者新建變數按鈕就新建一個變數,輸入名稱,選擇數據類型,賦初值就完成了。

如果要聲明某數據流任務組件使用的變數,只要雙擊該數據流任務組件,在流控制控制選項卡空白的地方單擊右鍵選擇變數命名,在變數窗口中新建一個變數命令,在變數窗口中新建一個變數,這時變數的作用域就是你選擇的流任務組件。

2、賦值

在實際開發中,除了在變數聲明的時候給變數賦值外,還有兩種方式,一種是通過執行SQL任務組件返回值的方式給變數賦值,一種是通過腳本組件來給變數賦值。

在執行SQL任務組件方法是先設置好組件的資料庫連接屬性,然後輸入從資料庫取數據的SQL語句,設置組件返回的結果集為單行。在結果集界面中單擊「新建」,在結果集那一列輸入你剛才SQL返回列的名稱,在變數名稱列選擇你要賦值的變數

圖中紅色方框中的SQL語句非常簡單,返回單行,結果是1。在圖4中,將返回的result列的一行賦值給用戶變數i。

利用腳本組件賦值變數比較簡單,只需要設置腳本組件的ReadOnlyvariable或者ReadWriteVariable,將變數的名稱設置他們的值(多個變數以逗號分割),它們的區別是前者在腳本組件只能夠讀,或者可以讀寫。然後在腳本組件中通過

Dts.Varables("變數名稱").Value=值

3、變數的使用

變數在ssis中使用的地方很多,筆者介紹兩個典型的應用。

(1) 執行 SQL 任務組件的參數

假定申明了一個日期類型變數StartDate,用戶需要通過從某個表中選擇在StartDate日期之前的數據,這個時候需要將StartDate作為參數傳給執行 SQL 任務組件。在執行 SQL 任務組件輸入SQL的地方輸入慎讓如下命令語句:

SELECT * FROM TABLE_a WHERE 日期欄位 < ?

然後在參數據映射界面新增映射,在變數名稱列選擇用戶變數StartDate,選擇類型為DATE,在參數名稱列輸入給參數取的名稱。這樣就可以將StartDate變數傳給SQL任務組件的SQL語句了。

(2) 在腳本組件中賦值

可以在腳本組件中通過Dts.Variables("i").Value = 1方式賦值給變數,也可以通過這種方式來使用變數。比如Dts.Variables("other_variable").Value = Dts.Variables("i").Value+1,這個語句是可以在腳本組件中執行的,將i變數加1後賦值給另外一個變數。

❸ SQL Server 表變數和臨時表的區別

一、表變數
表變數在SQL Server 2000中首次被引入。表變數的具體定義包括列定義,列名,數據類型和約束。而在表變數中可以使用的約束包括主鍵約束,唯一約束,NULL約束和CHECK約束(外鍵約束不能在表變數中使用)。定義表變數的語句是和正常使用Create Table定義表語句的子集。只是表變數通過DECLARE @local_variable語句進行定義。
表變數的特徵:
表變數擁有特定作用域(在當前批處理語句中,但不在任何當前批處理語句調用的存儲過程和函數中),表變數在批處理結束後自動被清除。
表變數較臨時表產生更少的存儲過程重編譯。
針對表變數的事務僅僅在更新數據時生效,所以鎖和日誌產生的數量會更少。
由於表變數的作用域如此之小,而且不屬於資料庫的持久部分,所以事務回滾不會影響表變數。
表變數可以在其作用域內像正常的表一樣使用。更確切的說,表變數可以被當成正常的表或者表表達式一樣在SELECT,DELETE,UPDATE,INSERT語句中使用,但是表變數不能在類似"SELECT select_list INTO table_variable"這樣的語句中使用。而在SQL Server2000中,表變數也不能用於INSERT INTO table_variable EXEC stored_procere這樣的語句中。
表變數不能做如下事情:
雖然表變數是一個變數,但是其不能賦值給另一個變數。
check約束,默認值和計算列不能引用自定義函數。
不能為約束命名。
不能Truncate表變數。
不能向標識列中插入顯式值(也就是說表變數不支持SET IDENTITY_INSERT ON)
二、臨時表
在深入臨時表之前,我們要了解一下會話(Session),一個會話僅僅是一個客戶端到數據引擎的連接。在SQL Server Management Studio中,每一個查詢窗口都會和資料庫引擎建立連接。一個應用程序可以和資料庫建立一個或多個連接,除此之外,應用程序還可能建立連接後一直不釋放知道應用程序結束,也可能使用完釋放連接需要時建立連接。
臨時表和Create Table語句創建的表有著相同的物理工程,但臨時表與正常的表不同之處有:
1、臨時表的名稱不能超過116個字元,這是由於資料庫引擎為了辨別不同會話建立不同的臨時表,所以會自動在臨時表的名字後附加一串。
2、局部臨時表(以"#"開頭命名的)作用域僅僅在當前的連接內,從在存儲過程中建立局部臨時表的角度來看,局部臨時表會在下列情況下被Drop:
a、顯示調用Drop Table語句
b、當局部臨時表在存儲過程內被創建時,存儲過程結束也就意味著局部臨時表被Drop。
c、當前會話結束,在會話內創建的所有局部臨時表都會被Drop。
3、全局臨時表(以"##"開頭命名的)在所有的會話內可見,所以在創建全局臨時表之前首先檢查其是否存在,否則如果已經存在,你將會得到重復創建對象的錯誤。
a、全局臨時表會在創建其的會話結束後被Drop,Drop後其他會話將不能對全局臨時表進行引用。
b、引用是在語句級別進行,如:
1.新建查詢窗口,運行語句:
CREATE TABLE ##temp(RowID int)
INSERT INTO ##temp VALUES(3)

2.再次新建一個查詢窗口,每5秒引用一次全局臨時表
While 1=1
BEGIN
SELECT * FROM ##temp
WAITFOR delay '00:00:05'
END

3.回到第一個窗口,關閉窗口。
4.下一次第二個窗口引用時,將產生錯誤。

4、不能對臨時表進行分區。
5、不能對臨時表加外鍵約束。
6、臨時表內列的數據類型不能定義成沒有在TempDb中沒有定義自定義數據類型(自定義數據類型是資料庫級別的對象,而臨時表屬於TempDb)。由於TempDb在每次SQL Server重啟後會被自動創建,所以你必須使用startup stored procere來為TempDb創建自定義數據類型。你也可以通過修改Model資料庫來達到這一目標。
7、XML列不能定義成XML集合的形式,除非這個集合已經在TempDb中定義。
臨時表既可以通過Create Table語句創建,也可以通過"SELECT <select_list> INTO #table"語句創建。你還可以針對臨時表用"INSERT INTO #table EXEC stored_procere"這樣的語句。
臨時表可以擁有命名的約束和索引。但是,當兩個用戶在同一時間調用同一存儲過程時,將會產生」There is already an object named 『<objectname>』 in the database」這樣的錯誤。所以最好的做法是不用為建立的對象進行命名,而使用系統分配的在TempDb中唯一的。

❹ 在sqlserver2008 自定義函數的時候,在查詢的時,表名如何用變數代替

試試這個
DECLARE @fname VARCHAR(20)
SET @fname = 'AccountName' --設置表欄位
DECLARE @table Nvarchar(1000)
SET @table = 'SELECT ' + @fname + ' FROM Account'
Exec(@table)

❺ SQL Server 表變數和臨時表的區別

表變數是一種特殊的數據類型,用於存儲結果集以進行後續處理。table 主要用於臨時存儲一組作為表值函數的結果集返回的行。其作用域為一個語句批。臨時表有兩種類型:本地表和全局表。在與首次創建或引用表時相同的 SQL Server 實例連接期間,本地臨時表只對於創建者是可見的。當用戶與 SQL Server 實例斷開連接後,將刪除本地臨時表,所以局部臨時表的作用域為當前連接。全局臨時表在創建後對任何用戶和任何連接都是可見的,當引用該表的所有用戶都與 SQL Server 實例斷開連接後,將刪除全局臨時表,所以全局臨時表的作用域為所有連接。

❻ SQL Server 表變數和臨時表的區別

臨時表與表變數都可以起到「臨時」的作用,那麼兩者主要的區別是什麼呢?
這里不討論創建方式,以及全局臨時表、會話臨時表這些,主要記錄一下個人對兩者的主要區別以及適用情況的看法,有什麼不對或補充的地方,歡迎討論。
區別:
1. 表變數存儲在內存中,當創建表變數時,sql server不會產生日誌,也不會維護統計信息;表變數的欄位不能建立索引;不能有約束和默認值。sql server 認為表變數通常只有很少量的數據。
2. 當創建臨時表時,sql server會產生日誌,統計信息;臨寬旅慶時表的欄位可慎握以建立索引,所以它可以存儲相對較多的數據;可以有約束和默認值,並且有鎖機制。可以說臨時表與實際的表幾乎是一樣的,只不過它是輕量和臨時的,可以在想要的時候創建和銷毀。
適用情況:
表變數: 如果是很少量數據,那麼就用表變數。使用表變數的開銷要小於臨時表。實際項目用到的地方,例如批量刪除,需要傳遞多個id 作為參數,有的人會拼接id字元串,然後在資料庫去解析;我的做法通常是傳遞xml,然後用xml生成表變數,然後鏈接表刪除。
臨鎮廳時表:有多張表鏈接查詢得到一個小結果集,該結果集需要在本次會話或多個會話里多次使用。

❼ sql server 2008 變數

declare @x 數穗冊蘆據類型
select @x=修改的數姿缺據 from 表 where 條件欄位='猜帶關鍵字'