久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SQL Server 2008新功能─傳遞表值參數(shù)

瀏覽:146日期:2023-11-04 08:23:37

許多人一直希望能夠?qū)崿F(xiàn)把表格變量傳遞到存儲(chǔ)過(guò)程中,如果變量可以被聲明,那么它就應(yīng)該能夠被傳遞。而最新的SQL Server 2008則有這項(xiàng)功能!想知道如何才能把表格變量(包括內(nèi)含的數(shù)據(jù))傳遞到存儲(chǔ)過(guò)程和功能中去嗎?

為什么要傳遞表值參數(shù)?

用戶常常會(huì)碰到許多需要把數(shù)值容器而非單個(gè)數(shù)值放到存儲(chǔ)過(guò)程里的情況。對(duì)于大部分的編程語(yǔ)言而言,把容器數(shù)據(jù)結(jié)構(gòu)傳遞到例程里或傳遞出來(lái)是很常見(jiàn)而且很必要的功能。TSQL也不例外。

SQL Server 2000通過(guò)OPENXML可以實(shí)現(xiàn)這個(gè)功能,用戶可以把數(shù)據(jù)存儲(chǔ)為VARCHAR數(shù)據(jù)類型然后進(jìn)行傳遞。到了SQL Server 2005,隨著 XML數(shù)據(jù)類型以及XQuery的出現(xiàn),這個(gè)功能變得容易一點(diǎn)。但用戶仍然需要對(duì)XML數(shù)據(jù)進(jìn)行組建和粉碎才能夠使用它,因此這個(gè)功能使用起來(lái)并不簡(jiǎn)單。SQL Server 2008則能夠把表值數(shù)據(jù)類型傳遞到存儲(chǔ)過(guò)程和功能中,從而大大地簡(jiǎn)化了編程的工作,因?yàn)槌绦騿T無(wú)需再花心思去組建和解析XML數(shù)據(jù)了。該功能還可以讓客戶方開(kāi)發(fā)員傳遞客戶方數(shù)據(jù)表格到數(shù)據(jù)庫(kù)中。

如何傳遞表格參數(shù)?

以銷售為例,首先建立一個(gè) my SalesHistory表格,里面包含了產(chǎn)品銷售的信息。寫(xiě)以下腳本就可以在數(shù)據(jù)庫(kù)里創(chuàng)建你選擇的表格:

IF OBJECT_ID('SalesHistory')>0 DROP TABLE SalesHistory; GO CREATE TABLE [dbo].[SalesHistory] ( [SaleID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [Product] [varchar](10) NULL, [SaleDate] [datetime] NULL, [SalePrice] [money] NULL ) GO

建立表值參數(shù)第一步是創(chuàng)建確切的表格類型,這一步非常重要,因?yàn)檫@樣你就可以在數(shù)據(jù)庫(kù)引擎里定義表格的結(jié)構(gòu),讓你可以在需要的時(shí)候在過(guò)程代碼里使用該表格。下面的代碼創(chuàng)建 SalesHistoryTableType 表格類型定義:

CREATE TYPE SalesHistoryTableType AS TABLE ( [Product] [varchar](10) NULL, [SaleDate] [datetime] NULL, [SalePrice] [money] NULL ) GO

如果想要查看系統(tǒng)里其他類型的表格類型定義,你可以執(zhí)行下面這個(gè)查詢命令,查看系統(tǒng)目錄:

SELECT * FROM sys.table_types

我們需要定義用來(lái)處理表值參數(shù)的存儲(chǔ)過(guò)程。下面這個(gè)程序能夠接受指定SalesHistoryTableType類型的表值參數(shù),并加載到SalesHistory中,表值參數(shù)在Product列中的值為“BigScreen”:

CREATE PROCEDURE usp_InsertBigScreenProducts ( @TableVariable SalesHistoryTableType READONLY ) AS BEGIN INSERT INTO SalesHistory ( Product, SaleDate, SalePrice ) SELECT Product, SaleDate, SalePrice FROM @TableVariable WHERE Product = 'BigScreen' END GO

傳遞的表格變量還可以用做任何其他表格的查詢數(shù)據(jù)。

在傳遞表值變量到程序中時(shí)必須使用 READONLY從句。表格變量里的數(shù)據(jù)不能做修改——除了修改你可以把數(shù)據(jù)用于任何其他的操作。另外,你也不能把表格變量用做OUTPUT參數(shù)——只能用做input參數(shù)。

使用自己的新表格變量類型

首先,要聲明一個(gè)變量類型SalesHistoryTableType,不需要再一次定義表格結(jié)構(gòu),因?yàn)樵趧?chuàng)建這個(gè)表格類型的時(shí)候已經(jīng)定義過(guò)了。

DECLARE @DataTable AS SalesHistoryTableType The following script adds 1,000 records into my @DataTable table variable: DECLARE @i SMALLINT SET @i = 1 WHILE (@i <=1000) BEGIN INSERT INTO @DataTable(Product, SaleDate, SalePrice) VALUES ('Computer', DATEADD(mm, @i, '3/11/1919'), DATEPART(ms, GETDATE()) + (@i + 57)) INSERT INTO @DataTable(Product, SaleDate, SalePrice) VALUES('BigScreen', DATEADD(mm, @i, '3/11/1927'), DATEPART(ms, GETDATE()) + (@i + 13)) INSERT INTO @DataTable(Product, SaleDate, SalePrice) VALUES('PoolTable', DATEADD(mm, @i, '3/11/1908'), DATEPART(ms, GETDATE()) + (@i + 29)) SET @i = @i + 1 END

只要把數(shù)據(jù)加載到表格變量里,就可以把結(jié)構(gòu)傳遞到存儲(chǔ)過(guò)程中。

注意:當(dāng)表格變量作為參數(shù)傳遞后,表格會(huì)在存儲(chǔ)在tempdb系統(tǒng)數(shù)據(jù)庫(kù)里,而不是傳遞整個(gè)數(shù)據(jù)集在內(nèi)存里。因?yàn)檫@樣保證高效處理大批量數(shù)據(jù)。所有服務(wù)器方的表格變量參數(shù)傳遞都是通過(guò)使用reference調(diào)用tempdb中的表格。

EXECUTE usp_InsertBigScreenProducts @TableVariable = @DataTable

想要查詢程序是否和預(yù)想效果一樣,可以執(zhí)行以下查詢來(lái)看記錄是否已經(jīng)插入到 SalesHistory表格中:

SELECT * FROM SalesHistory

總結(jié):

雖然SQL Server 2008的參數(shù)傳遞功能的使用還有一些小小的局限性,比如不能修改參數(shù)中的數(shù)據(jù)和把變量用于output,但是它大大提高了程序性能,它可以減少server往返旅程數(shù)、利用表格限制并擴(kuò)展編程在數(shù)據(jù)庫(kù)引擎中的功能。

主站蜘蛛池模板: 色性网站 | 成人免费淫片aa视频免费 | 亚洲小视频网站 | 欧美精品一区二区在线观看 | 欧美视频在线播放 | 黑人精品xxx一区一二区 | 最新伦理片 | 精品久久久久久久人人人人传媒 | 99久久久精品 | 欧美成人一区二区 | 成人国产精品视频 | 在线观看国产精品一区二区 | 天天操,夜夜操 | 91精品国产福利在线观看 | 爱色av| 成人精品久久久 | 精品无码久久久久国产 | 亚洲一区中文字幕 | 精品国产一区二区三区性色av | 一区二区三区国产好的精 | 国产精品美女在线观看 | 久久99精品久久久久久久青青日本 | 91日日夜夜| 一区二区三区免费网站 | 欧美视频在线一区 | 韩国精品在线 | 久久久国产视频 | 99久久精品免费 | 秋霞a级毛片在线看 | 国产精品理论电影 | 私人毛片免费高清视频 | av网站免费观看 | 国产精品成av人在线视午夜片 | 日韩国产精品一区二区三区 | av在线一区二区 | 国产精品45p | 91福利在线播放 | 999精品嫩草久久久久久99 | 国产精品久久国产愉拍 | 欧美日韩精品一区 | 欧美亚洲一区 |