❶ 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 条件字段='猜带关键字'