在SQL Server 2008中运用表值参数(TVP)
2008-05-27 09:55:33 来源:WEB开发网现在我们来创建一个接受新建表类型作为参数并执行代理键查找和推理处理的存储过程:
以下是引用片段:
CREATEPROCEDUREdbo.stp_GetCustomerSK
@source_key_listSourceKeyListREADONLY
AS
BEGIN
INSERTINTOdbo.dim_Customer(
CustomerSourceKey,CustomerName,InferredMember
)
SELECTSourceKey,N'INFERRED',1
FROM@source_key_listk
LEFTJOINdbo.dim_CustomercONc.CustomerSourceKey=k.SourceKey
WHEREsk_CustomerISNULL
SELECTsk_Customer,CustomerSourceKey
FROMdbo.dim_Customerc
JOIN@source_key_listkONk.SourceKey=c.CustomerSourceKey
END
GO
表值参数必须被声明为READONLY。你不能对表值参数执行任何DML(即插入、更新、删除)。你职能在SELECT语句里引用它。存储过程把表值参数与客户维度连接起来,查找出任何还不存在的源键,然后插入这些键。然后存储过程再把表值参数与客户维度连接来返回含有源键及其对应代理键的结果集。
你可以通过查询sys.parameters来查看任何被声明为READONLY的参数:
以下是引用片段:
SELECTobject_id,nameFROMsys.parameters
WHEREis_readonly=1
GO
声明表值参数,导入数据,并把它传递到存储过程里
你声明一个表类型的T-SQL变量,使用INSERT插入语句向该表导入数据:
以下是引用片段:
DECLARE@source_key_listSourceKeyList
INSERTINTO@source_key_list
SELECT'CustomerID_001'UNIONALL
SELECT'CustomerID_002'UNIONALL
SELECT'CustomerID_003'
EXECdbo.stp_GetCustomerSK@source_key_list
GO
为了演示的目的,上面的SELECt语句只是硬编码一些值来插入;你通常可以从你的源系统表里执行SELECT DISTINCT命令来获得你希望对其执行代理键查找功能的源系统键的列表。上面脚本返回的结果应该如下图所示:
返回结果显示了每一个源键的代理键。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接