在SQL Server 2008中运用表值参数(TVP)(3)_Mssql数据库教程
教程Tag:暂无Tag,欢迎添加,赚取U币!
缂傚倸鍊搁崐椋庣矆娴h娲晝閸屾氨鍔电紓浣插亾闁硅京顒CMS闂備浇宕甸崰鎰版偡閵夈儙娑樷攽鐎c劉鍋撻崒鐐查唶闁哄洨鍋為悗顒€鈹戦悙鍙夘棡闁搞劎鍠栧濠氭晸閿燂拷婵犵數鍋為崹璺侯潖鐟欏嫮鐝堕柛鈩冪☉閻撴﹢鏌″搴″箺闁抽攱甯¢弻銊╂偆閸屾稑顏� 缂傚倸鍊风粈渚€藝闁秴绐楅柟閭﹀墾閼板潡鏌涢妷顔煎缂佲偓婢舵劖鐓冮柕澶堝妽閻濐亪鏌e┑鎾村 闂傚倸鍊风欢锟犲磻閸曨垁鍥ㄦ綇閳哄啰顦繝銏f硾閺堫剟宕楀⿰鍫熺厸闁搞儯鍔嶉惃鎴︽⒒婢跺﹦效闁哄被鍊栧ḿ蹇涘Ω閿旂粯顥涚紓鍌欑劍閸炲骞忛敓锟� 闂傚倷绀侀幖顐﹀疮閻楀牊鍙忛柟缁㈠枛濡炰粙鏌″搴′簽闁告纰嶇换娑㈠幢濡闉嶅┑顕嗙稻閸旀鍩€椤掑喚娼愰柟顔肩埣瀹曟洟鏌嗗鍛厬闂佽法鍣﹂幏锟�,闂傚倷娴囬惃顐﹀礋椤愩垹袘闂佽姘﹂~澶嬬箾婵犲偆鍤曢柛顐f礀缁€鍐┿亜閺傚灝鎮戞い蹇曞枑缁绘盯骞嬮悙鏉戠殤闂佺ǹ顑嗛幑鍥ь潖閸濆嫧鏋庨柟顖嗗嫮浜梻浣告啞閻熴儳鎹㈠Ο渚殨濠电姵纰嶉弲鎼佹煥閻曞倹瀚�!
推荐:SQL Server数据库增强版备份体验
老鸟说事:Microsoft SQL Server数据库增强版备份体验
在欧洲,有一首流传很广的民谚:
因为丢失一根铁钉,我们失去了一块马蹄铁;
因为失去一块马蹄铁,我们失去了一匹骏马;
因为失去
现在我们来创建一个接受新建表类型作为参数并执行代理键查找和推理处理的存储过程:
以下为引用的内容: 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命令来获得你希望对其执行代理键查找功能的源系统键的列表。
返回结果显示了每一个源键的代理键。