sql server linux性能,详细了解SQL Server 2008性能和性能优化

在SQL Server 2005或更早的版本中的中,表变量是不能作为存储过程的参数的。当多行数据到SQL Server需要发送多行数据到SQL Server ,开发者要么每次发送一列记录,或想出其他的变通方法,以满足需求。虽然在.net 2.0中提供了个SQLBulkCopy对象能够将多个数据行一次性传送给SQL Server,但是多行数据仍然无法一次性传给存储过程。

SQL Server 2008中的T-SQL功能新增了表值参数。利用这个新增特性,我们可以很方便地通过T-SQL语句,或者通过一个应用,将一个表作为参数传给存储过程。

1、用户自定义表类型

当第一次看看新的表值参数,我认为使用此功能有点复杂。有几个步骤。要做的第一件事是定义表型。在Management Studio 2008中的“Programmability”“Type”节点,您可以看到“User-Defined Table Types(用户自定义表类型)”,如图1所示 。

0vmk44ghc780.jpg

图 1:用户自定义表类型

点击右键,在弹出菜单中选择“新用户定义的表型... ” ,会新建一个模板中的查询窗口,如图2所示 。

kfw9070ujh9o.jpg

图2:用户自定义表类型创建语句

点击“Specify Values for Template Parameters(指定值为模板参数)”按钮,将探出一个对话框,如图3所示。

86459klhsis7.jpg

图 3:指定模板参数列的数值

在填写在适当的数值之后,点击确定按钮,一个“CREATE TYPE”的声明取代了范本。这时,你也可以手动增加一些列,或者增加一些限制条件,最后点击确定按钮。

以下是最终的代码:

-- ================================

-- Create User-defined Table Type

-- ================================

USE Test

GO

-- Create the data type

CREATE TYPE dbo.MyType AS TABLE

(

col1 int NOT NULL,

col2 varchar(20) NULL,

col3 datetime NULL,

PRIMARY KEY (col1)

)

GO

在运行代码之后,对象的定义就建立好了,你可以在“User-Defined Table Type(用户自定义表类型”中查看属性,如图4所示,但没法修改它们。如果要修改的类型,你只能将其删除,然后按照修改后的属性再次创建它。

r30ia99ekrks.jpg

图4:查看用户自定义表类型的属性

2、使用用户自定义的表类型

如果打算在T-SQL代码中使用,您还必须创建一个新类型的变量,然后将具体的表的名称赋值给该变量。一旦赋值后,您可以在其他的T-SQL语句中使用它。因为它是一个变量,在批处理完成后,它也自动失效,结束生命周期。

请注意下面的代码,MyType是我们之前刚刚创建的数据类型。

DECLARE @MyTable MyType

INSERT INTO @MyTable(col1,col2,col3)

VALUES (1,'abc','1/1/2000'),

(2,'def','1/1/2001'),

(3,'ghi','1/1/2002'),

(4,'jkl','1/1/2003'),

(5,'mno','1/1/2004')

SELECT * FROM @MyTable

在变量的有效范围内,你可以象操作正常的表一样来操作这个变量,如与另一个表象关联或者将变量中的记录填充到另一个表。对于表变量来说,你无法修改表定义。

正如前面提到的,变量不能超出它的有效的范围。如果T-SQL脚本由多个批处理组成,变量只有在批处理内才能创建并有效使用。

3、使用变量作为参数

到目前为止,我们还没有看到经常表变量无法实现的功能。其好处是能够将变量作为参数传给存储过程。当然一个存储过程必须先建立,使用新的类型作为其中的一个参数。

下面这个例子,通过代码创建一个常规表,并对其填充记录。

USE [Test]

GO

CREATE TABLE [dbo].[MyTable] (

[col1] [int] NOT NULL PRIMARY KEY,

[col2] [varchar](20) NULL,

[col3] [datetime] NULL,

[UserID] [varchar] (20) NOT NULL

)

GO

CREATE PROC usp_AddRowsToMyTable @MyTableParam MyType READONLY,

@UserID varchar(20) AS

INSERT INTO MyTable([col1],[col2],[col3],[UserID])

SELECT [col1],[col2],[col3],@UserID

FROM @MyTableParam

GO

请注意表值参数后面带了个READONLY参数。这是必需的,不能在例程体中对表值参数执行诸如 UPDATE、DELETE 或 INSERT 这样的 DML 操作。

最后,我们对创建表值变量,对变量进行赋值,并调用存储过程。

DECLARE @MyTable MyType

INSERT INTO @MyTable(col1,col2,col3)

VALUES (1,'abc','1/1/2000'),

(2,'def','1/1/2001'),

(3,'ghi','1/1/2002'),

(4,'jkl','1/1/2003'),

(5,'mno','1/1/2004')

EXEC usp_AddRowsToMyTable @MyTableParam = @MyTable, @UserID = 'Kathi'

SELECT * FROM MyTable

为了让用户使用自定义表类型,执行或控制权限必须是理所当然的。以下是授权命令:

GRANT EXECUTE ON TYPE::dbo.MyType TO TestUser;

4、通过.net应用程序调用

表值参数这一特性最大的亮点在于可以在.net应用中使用表值参数。为了做到这一点,你必须要先安装.NET 3.5框架,并确保应用程序中已经引用了 System.Data.SqlClient命名空间。创建表值参数时需要用到一些新的SQL数据类型(如DataTable、DataColumn等)。

首先创建一个本地数据表,并插入一些记录。肯定的是, DataTable中创建符合用户定义的表型的列计数和数据类型。

'Create a local table

Dim table As New DataTable("temp")

Dim col1 As New DataColumn("col1", System.Type.GetType("System.Int32"))

Dim col2 As New DataColumn("col2", System.Type.GetType("System.String"))

Dim col3 As New DataColumn("col3", System.Type.GetType("System.DateTime"))

table.Columns.Add(col1)

table.Columns.Add(col2)

table.Columns.Add(col3)

'Populate the table

For i As Integer = 20 To 30

Dim vals(2) As Object

vals(0) = i

vals(1) = Chr(i + 90)

vals(2) = System.DateTime.Now

table.Rows.Add(vals)

Next

我们在代码中采用存储过程:创建一个命令对象,并新增两个参数。代码如下图所示:

'Create a command object that calls the stored proc

Dim command As New SqlCommand("usp_AddRowsToMyTable", conn)

command.CommandType = CommandType.StoredProcedure

'Create a parameter using the new type

Dim param As SqlParameter = command.Parameters.Add

("@MyTableParam", SqlDbType.Structured)

command.Parameters.AddWithValue("@UserID", "Kathi")

请注意@ MyTableParam参数的数据类型(SqlDbType.Structured),这是.Net 3.5中新增的功能。最后,将当地表赋值给表值参数,并执行该命令。

'Set the value of the parameter

param.Value = table

'Execute the query

command.ExecuteNonQuery()

5、小结

SQL Server 2008中新增的表值参数特性,减少了应用程序与SQL Server服务器之间的交互,提升了程序性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发linux显卡驱动,显卡驱动开发DRM入门--Apple的学习笔记

由于之前的blog提及kmscube的源码我没有找到,所以只能在网上搜索了。DRM简介DRM是Linux目前主流的图形显示框架,同时DRM可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护。而且drm是集成在linux kernel中的。DR…

android mvc使用方法,详细学习android mvc设计模式教程

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 web 应用程序的模式。其分层有助于管理复杂的应用程序,因为可以在一个时间内专门关注一个方面。例如,可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易…

android l 电池,DIY新技能--M1L换电池

DIY新技能--M1L换电池2019-10-23 16:48:526点赞6收藏10评论更换理由M1L是好几年前买的了,具体几年前我都懒得购买记录了。前前后后买了4台锤子手机了,这是我支持老罗的第二款手机,前一款是坚果手机,买了两台早先给妈妈用一台后来给…

android版本10好不好,一加正式推送Android 10系统 流畅性怎么样

近日,一加正式推送Android 10系统,不知道流畅性如何呢?一加官方推特正式宣布Android 10系统已进行阶段性推送,从今天开始一加7和一加7 Pro手机用户将会陆续收到氧OS系统的更新,国内基于Android 10的氢OS将于下月推送。…

android屏幕适配流程,Android屏幕适配姿势

GitHub地址为什么要屏幕适配?device_framentation.png统计碎片化品牌机型碎片化屏幕尺寸碎片化操作系统碎片化为了保证用户获得一致的用户体验效果,使得某一元素在Android不同尺寸、不同分辨率的手机上具备相同的显示效果,则需要我们进行屏幕…

在html中写js提示错误,页面HTML标签优化

真正需要SEOer掌握并经常使用的HTML标签也就那么几个,本小节错误君带来的是页面HTML标签优化。title标签 – 标题标签1)title标签用法2.13 TF-IDF加权方法 – 错误教程2)标题标签的作用文章标题有着关键词的作用,文章标题引点击流量。3)页面标题标签优化…

在线聊天室html5源码,HTML5WebSocket实现聊天室的代码示例

本篇文章主要介绍了HTML5-WebSocket实现聊天室示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。在传统的网页实现聊天室的方法是通过每隔一段时间请求服务器获取相关聊天信息来实现,然而html5带来的websocket功能改变这了这种方式&am…

列表页时间日期标签靠显示html,帝国CMS列表页面list.var分别调用年月日,显示个性时间日期...

在帝国CMS中列表页个性时间显示的实现方式,首先我们要知道用什么方法来实现,这里我们使用PHP代码来做。要在模板代码中使用PHP代码,就必须勾选此模板代码页面的-使用程序代码.位置就在添加模板页面的列表内容模板(list.var) (*)上边。然后我们在list.var…

html鼠标响应事件吗,学习JavaScript鼠标响应事件

本文为大家分享了一个简单的鼠标模拟案例,供大家参考,具体实现内容如下如何实现捕抓鼠标事件,当鼠标滑动时,获取当前鼠标的坐标,接着在一个透明区域里绑定捕抓的位移,这样就能在模拟的透明区域里实现鼠标滑…

html5边框闪烁,HTML – CSS框阴影动画像素艺术闪烁

部分用于测试,部分用于我的设计理念,我试图将动画gif转换为纯动画CSS.它几乎正常工作,但我遇到了障碍,我不确定是什么导致了我的问题,或者我如何解决它.我不幸地怀疑我只是限制了技术.至于实际的CSS,我一直在尝试实现这里的方法(动画框阴影属性),因为它看起来最可行&#xff1a…

如把联想电脑计算机图标放在桌面上,thinkpad电脑图标没了怎么恢复

正常情况下,在电脑的桌面上都会有系统自带的程序图标,以及用户自己创建的一些图标。可是最近有网友却跟小编反映说,自己thinkpad电脑出现了图标都没了的情况,不知道怎么回事,更加不清楚怎么恢复。那么对此今天本文就来…

未来计算机领域最急缺的人,未来十年最紧缺职业 没人愿意干的高薪职业

未来十年最紧缺职业 没人愿意干的高薪职业2019-03-19 09:25:56文/刘美娟未来十年中国最紧缺的高薪职业类型有:金融分析师、理财规划师以及动漫设计师等。未来最紧缺的高薪职业金融分析师金融分析师是证券投资和管理界的高级人才,目前我国能够真正拿到特许…

口琴膜片什么作用_思域发动机舱里的这个东西是什么东东,它究竟有什么作用呢?...

​今天的文章我们主要来讲讲图中的这个东西究竟是什么?你们知道他是干什么的吗,这个东西究竟有什么作用?这是前几天的一个微信网友添加我微信问我的问题,今天对这个问题整理了一下,顺来来科普一下关于这个系统的具体应…

椭圆形中间一个大写的v_静安区椭圆形桥梁空心板橡胶气囊,方形桥梁板橡胶气囊_冠桥橡胶...

首页 > 新闻中心发布时间:2020-12-11 07:22:18 导读:冠桥橡胶为您提供静安区椭圆形桥梁空心板橡胶气囊,方形桥梁板橡胶气囊的相关知识与详情: 分集水器上,由于主要功能是调节,般选截止阀或闸阀。后来又出现了一种新…

计算机专业独显好还是集显好,笔记本选购指南:笔记本电脑核显好还是独显好?...

暑期装机热潮来了,而大部分大学生会选择入手一台笔记本而不是笨重的台式机,今天这里主要讲下笔记本选购指南,笔记本电脑核显好还是独显好?可能这个问题提出来,大家就要说很外行。不过既然是写给不太懂电脑的人看&#…

oracle查同比增长_天眼查:目前我国今年新增2.3万家充电桩相关企业,同比增长16.94%...

天眼查专业版数据显示,目前我国有近10万家经营范围含“充电桩、新能源智能充电、电动汽车充电”,且状态为在业、存续、迁入、迁出的充电桩相关企业。从地域分布来看,我国充电桩相关企业较多集中在广东、山东和江苏这三个省份,其中…

速卖通手机端怎样加入html,如何正确使用速卖通手机版的关联营销模板

如何正确使用速卖通手机版的关联营销模板旺销王发表于:2018年11月15日 17:47:22更新于:2019年08月07日 15:19:13很多速卖通卖家都在群里跟小编反应一个问题,为什么没有单独生成手机速卖通详情的速卖通产品的速卖通关联营销在速卖通店铺是可以…

能用来写安卓吗_iPad能代替笔记本吗,除了看剧还能用来做什么?

今天想和大家分享一下我手里的这台iPad Pro。关于它主要是两个方面:● 我自己用它会做哪些事情?● 分享几款我觉得好用的的iPad app(最后会附上我个人关于iPad的选购建议)首先,它不是我的第一款iPad产品。在我大二的时候,我非常幸…

c语言辗转相除法求最大公约数_趣味探究:妙法求“最大公因数”,比书上难一点,你敢挑战吗?(适合56年级)...

【题记】宝石虽落在泥土里,仍是宝石,砂粒虽被吹到天空中,还是砂粒。——莎士比亚不是有水的地方就有青蛙,但是青蛙叫的地方必定有水。——歌德【配合教材】本探究配合“因数与倍数”。通过本探究能够帮助学生巩固所学知识&#xf…

中北大学和陕西科技大学计算机专业,西北地区两所重点大学,中北大学和陕西科技大学...

中北大学,位于山西省太原市。山西省属重点大学,省部共建高校。中北大学创办于1941年5月,时名太行工业学校。建国后迁入现址,更名为华北兵工职业学校。1958年升级为太原机械学院。1961年合并现北京理工大学4个常规兵器专业&#xf…