SQL Server 2008:传递表值参数
SQL Server 2008 则能够把 表值数据类型 传递 到存储过程和功能中,从而大大地简化了编程的工作,因为程序员无需再花心思去组建和解析XML数据了…… 许多人一直希望能够实现把表格变量 传递 到存储过程中,如果变量可以被声明,那么它就应该能够被 传递 。而
SQL Server 2008则能够把表值数据类型传递到存储过程和功能中,从而大大地简化了编程的工作,因为程序员无需再花心思去组建和解析XML数据了……
许多人一直希望能够实现把表格变量传递到存储过程中,如果变量可以被声明,那么它就应该能够被传递。而最新的SQL Server 2008则有这项功能!想知道如何才能把表格变量(包括内含的数据)传递到存储过程和功能中去吗?
为什么要传递表值参数?
用户常常会碰到许多需要把数值容器而非单个数值放到存储过程里的情况。对于大部分的编程语言而言,把容器数据结构传递到例程里或传递出来是很常见而且很必要的功能。TSQL也不例外。
SQL Server 2000通过OPENXML可以实现这个功能,用户可以把数据存储为VARCHAR数据类型然后进行传递。到了SQL Server 2005,随着 XML数据类型以及XQuery的出现,这个功能变得容易一点。但用户仍然需要对XML数据进行组建和粉碎才能够使用它,因此这个功能使用起来并不简单。SQL Server 2008则能够把表值数据类型传递到存储过程和功能中,从而大大地简化了编程的工作,因为程序员无需再花心思去组建和解析XML数据了。该功能还可以让客户方开发员传递客户方数据表格到数据库中。
如何传递表格参数?
以销售为例,首先建立一个 my SalesHistory表格,里面包含了产品销售的信息。写以下脚本就可以在数据库里创建你选择的表格:
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 |
建立表值参数第一步是创建确切的表格类型,这一步非常重要,因为这样你就可以在数据库引擎里定义表格的结构,让你可以在需要的时候在过程代码里使用该表格。下面的代码创建 SalesHistoryTableType 表格类型定义:
CREATE TYPE SalesHistoryTableType AS TABLE ( [Product] [varchar](10) NULL, [SaleDate] [datetime] NULL, [SalePrice] [money] NULL ) GO |
如果想要查看系统里其他类型的表格类型定义,你可以执行下面这个查询命令,查看系统目录:
SELECT * FROM sys.table_types
我们需要定义用来处理表值参数的存储过程。下面这个程序能够接受指定SalesHistoryTableType类型的表值参数,并加载到SalesHistory中,表值参数在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 |
传递的表格变量还可以用做任何其他表格的查询数据。
传递表值参数功能的局限性
在传递表值变量到程序中时必须使用 READONLY从句。表格变量里的数据不能做修改――除了修改你可以把数据用于任何其他的操作。另外,你也不能把表格变量用做OUTPUT参数――只能用做input参数。
使用自己的新表格变量类型
首先,要声明一个变量类型SalesHistoryTableType,不需要再一次定义表格结构,因为在创建这个表格类型的时候已经定义过了。
DECLARE @DataTable AS SalesHistoryTableType The following script adds 1,000 records into my @DataTable table variable: DECLARE @i SMALLINT SET @i = 1 WHILE (@i 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 |
只要把数据加载到表格变量里,就可以把结构传递到存储过程中。
注意:当表格变量作为参数传递后,表格会在存储在tempdb系统数据库里,而不是传递整个数据集在内存里。因为这样保证高效处理大批量数据。所有服务器方的表格变量参数传递都是通过使用reference调用tempdb中的表格。
EXECUTE usp_InsertBigScreenProducts @TableVariable = @DataTable |
想要查询程序是否和预想效果一样,可以执行以下查询来看记录是否已经插入到 SalesHistory表格中:
以下是引用片段: SELECT * FROM SalesHistory |
总结:
虽然SQL Server 2008的参数传递功能的使用还有一些小小的局限性,比如不能修改参数中的数据和把变量用于output,但是它大大提高了程序性能,它可以减少server往返旅程数、利用表格限制并扩展编程在数据库引擎中的功能。
精彩推荐
|
SQL Server 2008 功能、特性介绍 |

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











HQL과 SQL은 Hibernate 프레임워크에서 비교됩니다. HQL(1. 객체 지향 구문, 2. 데이터베이스 독립적 쿼리, 3. 유형 안전성), SQL은 데이터베이스를 직접 운영합니다(1. 데이터베이스 독립적 표준, 2. 복잡한 실행 파일) 쿼리 및 데이터 조작).

"OracleSQL의 나눗셈 연산 사용법" OracleSQL에서 나눗셈 연산은 일반적인 수학 연산 중 하나입니다. 데이터 쿼리 및 처리 중에 나누기 작업은 필드 간의 비율을 계산하거나 특정 값 간의 논리적 관계를 도출하는 데 도움이 될 수 있습니다. 이 문서에서는 OracleSQL의 나누기 작업 사용법을 소개하고 구체적인 코드 예제를 제공합니다. 1. OracleSQL의 두 가지 분할 연산 방식 OracleSQL에서는 두 가지 방식으로 분할 연산을 수행할 수 있습니다.

Oracle과 DB2는 일반적으로 사용되는 관계형 데이터베이스 관리 시스템으로, 각각 고유한 SQL 구문과 특성을 가지고 있습니다. 이 기사에서는 Oracle과 DB2의 SQL 구문을 비교 및 차이점을 설명하고 구체적인 코드 예제를 제공합니다. 데이터베이스 연결 Oracle에서는 다음 문을 사용하여 데이터베이스에 연결합니다. CONNECTusername/password@database DB2에서 데이터베이스에 연결하는 문은 다음과 같습니다. CONNECTTOdataba

MyBatis 동적 SQL 태그 해석: Set 태그 사용법에 대한 자세한 설명 MyBatis는 풍부한 동적 SQL 태그를 제공하고 데이터베이스 작업 명령문을 유연하게 구성할 수 있는 탁월한 지속성 계층 프레임워크입니다. 그 중 Set 태그는 업데이트 작업에서 매우 일반적으로 사용되는 UPDATE 문에서 SET 절을 생성하는 데 사용됩니다. 이 기사에서는 MyBatis에서 Set 태그의 사용법을 자세히 설명하고 특정 코드 예제를 통해 해당 기능을 보여줍니다. Set 태그란 무엇입니까? Set 태그는 MyBati에서 사용됩니다.

SQL에서 ID란 무엇입니까? SQL에서 ID는 자동 증가 숫자를 생성하는 데 사용되는 특수 데이터 유형으로, 테이블의 각 데이터 행을 고유하게 식별하는 데 사용됩니다. ID 열은 일반적으로 기본 키 열과 함께 사용되어 각 레코드에 고유한 식별자가 있는지 확인합니다. 이 문서에서는 Identity를 사용하는 방법과 몇 가지 실제 코드 예제를 자세히 설명합니다. Identity를 사용하는 기본 방법은 테이블을 생성할 때 Identit을 사용하는 것입니다.

WindowsServerBackup은 WindowsServer 운영 체제와 함께 제공되는 기능으로, 사용자가 중요한 데이터 및 시스템 구성을 보호하고 중소기업 및 대기업 수준의 기업에 완벽한 백업 및 복구 솔루션을 제공하도록 설계되었습니다. Server2022 이상을 실행하는 사용자만 이 기능을 사용할 수 있습니다. 이 문서에서는 WindowsServerBackup을 설치, 제거 또는 재설정하는 방법을 설명합니다. Windows Server 백업을 재설정하는 방법 서버 백업에 문제가 있거나 백업에 너무 오랜 시간이 걸리거나 저장된 파일에 액세스할 수 없는 경우 Windows Server 백업 설정을 재설정하는 것을 고려할 수 있습니다. Windows를 재설정하려면

해결 방법: 1. 로그인한 사용자에게 데이터베이스에 액세스하거나 운영할 수 있는 충분한 권한이 있는지 확인하고 해당 사용자에게 올바른 권한이 있는지 확인하십시오. 2. SQL Server 서비스 계정에 지정된 파일에 액세스할 수 있는 권한이 있는지 확인하십시오. 3. 지정된 데이터베이스 파일이 다른 프로세스에 의해 열렸거나 잠겼는지 확인하고 파일을 닫거나 해제한 후 쿼리를 다시 실행하십시오. .관리자로 Management Studio를 실행해 보세요.

i9-12900H는 14코어 프로세서로, 사용된 아키텍처와 기술이 모두 새롭고, 전반적인 작업이 매우 뛰어나며, 특히 포괄적이며 사용자에게 뛰어난 경험을 제공할 수 있습니다. . i9-12900H 매개변수 평가 검토: 1. i9-12900H는 14코어 프로세서로, q1 아키텍처와 24576kb 프로세스 기술을 채택하고 20스레드로 업그레이드되었습니다. 2. 최대 CPU 주파수는 1.80!5.00ghz이며 주로 작업량에 따라 다릅니다. 3. 가격에 비해 가격 대비 성능이 매우 적합하며 정상적인 사용이 필요한 일부 파트너에게 매우 적합합니다. i9-12900H 매개변수 평가 및 성능 벤치마크
