午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > SqlServer參數化查詢之where in和like實現之xml和DataTable傳參介紹

SqlServer參數化查詢之where in和like實現之xml和DataTable傳參介紹

熱門標簽:西安青牛防封電銷卡 400電話申請需要開戶費嗎 溫州語音外呼系統代理 重慶防封電銷機器人供應商 山西語音外呼系統價格 北京辦理400電話多少 威海智能語音外呼系統 智能語音外呼系統哪個牌子好 南京電銷外呼系統運營商

方案5 使用xml參數

對sql server xml類型參數不熟悉的童鞋需要先了解下XQuery概念,這里簡單提下XQuery 是用來從 XML 文檔查找和提取元素及屬性的語言,簡單說就是用于查詢xml的語言說到這就會牽著到XPath,其實XPath是XQuery的一個子集,XQuery 1.0 和 XPath 2.0 共享相同的數據模型,并支持相同的函數和運算符,XPath的方法均適用于XQuery,假如您已經學習了 XPath,那么學習 XQuery 也不會有問題。詳見https://www.jb51.net/w3school/xquery/xquery_intro.htm

XQuery概念了解后需要進一步了解下Sql Server對xml的支持函數,主要為query()、nodes()、exist()、value()、modify() ,詳見http://msdn.microsoft.com/zh-cn/library/ms190798.aspx

使用xml方式實現where in時有兩種實現方式,使用value和exist,在這里推薦使用exist方法,msdn是這樣描述的:

D.使用 exist() 方法而不使用 value() 方法
由于性能原因,不在謂詞中使用 value() 方法與關系值進行比較,而改用具有 sql:column() 的 exist()。
http://msdn.microsoft.com/zh-cn/library/ms178030.aspx

使用xml的value方法實現(不推薦)

復制代碼 代碼如下:

DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
string xml = @"
root>
UserID>1/UserID>
UserID>2/UserID>
UserID>5/UserID>
/root>";
SqlCommand comm = conn.CreateCommand();
//不推薦使用value方法實現,性能相對exist要低
comm.CommandText = @"select * from Users
where exists
(
select 1 from @xml.nodes('/root/UserID') as T(c)
where T.c.value('text()[1]','int')= Users.UserID
)";

//也可以這樣寫,結果是一樣的
//comm.CommandText = @"select * from Users
// where UserID in
// (
// select T.c.value('text()[1]','int') from @xml.nodes('/root/UserID') as T(c)
// )
comm.Parameters.Add(new SqlParameter("@xml", SqlDbType.Xml) { Value = xml });
using (SqlDataAdapter adapter = new SqlDataAdapter(comm))
{
adapter.SelectCommand = comm;
adapter.Fill(dt);
}
}

使用xml的exist方法實現(推薦)
復制代碼 代碼如下:

DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
string xml = @"
root>
UserID>1/UserID>
UserID>2/UserID>
UserID>5/UserID>
/root>";
SqlCommand comm = conn.CreateCommand();

//使用xml的exist方法實現這樣能夠獲得較高的性能
comm.CommandText = @"select * from Users where @xml.exist('/root/UserID[text()=sql:column(""UserID"")]')=1";
comm.Parameters.Add(new SqlParameter("@xml", SqlDbType.Xml) { Value = xml });
using (SqlDataAdapter adapter = new SqlDataAdapter(comm))
{
adapter.SelectCommand = comm;
adapter.Fill(dt);
}
}

列舉下不同xml結構的查詢方法示例,在實際使用中經常因為不同的xml結構經常傷透了腦筋
復制代碼 代碼如下:

DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
string xml = @"
root>
User>
UserID>1/UserID>
/User>
User>
UserID>2/UserID>
/User>
User>
UserID>5/UserID>
/User>
/root>";
SqlCommand comm = conn.CreateCommand();

//不推薦使用value方法實現,性能相對exist要低
comm.CommandText = @"select * from Users
where UserID in
(
select T.c.value('UserID[1]','int') from @xml.nodes('/root/User') as T(c)
)";
//也可以這樣寫,結果是一樣的
//comm.CommandText = @"select * from Users
// where exists
// (
// select 1 from @xml.nodes('/root/User') as T(c)
// where T.c.value('UserID[1]','int') = Users.UserID
// )";
comm.Parameters.Add(new SqlParameter("@xml", SqlDbType.Xml) { Value = xml });
using (SqlDataAdapter adapter = new SqlDataAdapter(comm))
{
adapter.SelectCommand = comm;
adapter.Fill(dt);
}
}

復制代碼 代碼如下:

DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
string xml = @"
root>
User>
UserID>1/UserID>
/User>
User>
UserID>2/UserID>
/User>
User>
UserID>5/UserID>
/User>
/root>";
SqlCommand comm = conn.CreateCommand();
//使用xml的exist方法實現這樣能夠獲得較高的性能
comm.CommandText = @"select * from Users where @xml.exist('/root/User[UserID=sql:column(""UserID"")]')=1";

comm.Parameters.Add(new SqlParameter("@xml", SqlDbType.Xml) { Value = xml });
using (SqlDataAdapter adapter = new SqlDataAdapter(comm))
{
adapter.SelectCommand = comm;
adapter.Fill(dt);
}
}

使用xml參數時需要注意點:

  1.不同于SQL語句默認不區分大小寫,xml的XQuery表達式是嚴格區分大小寫的,所以書寫時一定注意大小寫問題

  2.使用exist時sql:column() 中的列名須使用雙引號,如sql:column("UserID"),若非要使用單引號需要連續輸入兩個單引號 sql:column(''UserID'')

  3.不管是where in或是其他情況下使用xml查詢時能用exist(看清楚了不是sql里的exists)方法就用exist方法,我們不去刻意追求性能的優化,但能順手為之的話何樂而不為呢。

方案6 使用表值參數(Table-Valued Parameters 簡稱TVP Sql Server2008開始支持)
按照msdn描述TVP參數在數據量小于1000時有著很出色的性能,關于TVP可以參考 http://msdn.microsoft.com/en-us/library/bb510489.aspx

這里主要介紹如何使用TVP實現DataTable集合傳參實現where in
1.使用表值參數,首先在數據庫創建表值函數
create type IntCollectionTVP as Table(ID int)
2.表值函數創建好后進行c#調用,
注意點:
  1.需要SqlParameter中的SqlDbType設置為SqlDbType.Structured然后需要設置TypeName為在數據庫中創建的表值函數名,本示例中為IntCollectionTVP
  2.構造的DataTabel列數必須和表值函數定義的一樣,具體列名隨意,無需和表值函數定義的列名一致,數據類型可以隨意,但還是建議和表值類型定義的保持一致,一來省去隱式類型轉換,二來可以在初始化DataTabel時就將不合法的參數過濾掉
  3.建議定義tvp的時候最好查詢條件里的類型和tvp對應字段類型保持一致,這樣可以避免隱式類型轉換帶來的性能損失

復制代碼 代碼如下:

DataTable resultDt = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand comm = conn.CreateCommand();
comm.CommandText = @"select * from Users(nolock)
where exists
(
select 1 from @MyTvp tvp
where tvp.ID=Users.UserID
)";
//構造需要傳參的TVP DataTable
DataTable tvpDt = new DataTable();
//為表添加列,列數需要和表值函數IntCollectionTVP保值一致,列名可以不一樣
tvpDt.Columns.Add("myid", typeof(int));
//添加數據
tvpDt.Rows.Add(1);
tvpDt.Rows.Add(2);
tvpDt.Rows.Add(3);
tvpDt.Rows.Add(4);
//這里的TypeName對應我們定義的表值函數名
comm.Parameters.Add(new SqlParameter("@MyTvp", SqlDbType.Structured) { Value = tvpDt, TypeName = "IntCollectionTVP" });
using (SqlDataAdapter adapter = new SqlDataAdapter(comm))
{
adapter.SelectCommand = comm;
adapter.Fill(resultDt);
}
}

總結:
至此,一共總結了6六種where參數化實現,分別如下
1.使用CHARINDEX或like實現where in 參數化
2.使用exec動態執行SQl實現where in 參數化
3.為每一個參數生成一個參數實現where in 參數化
4.使用臨時表實現where in 參數化
5.使用xml參數實現where in 參數化
6.使用表值參數(TVP)實現where in 參數化
其中前4種在Sql Server參數化查詢之where in和like實現詳解 一文中進行了列舉和示例
6種方法,6種思路,
其中方法1 等于完全棄用了索引,若無特殊需要不建議采用,
方法2 本質上合拼SQL沒啥區別與其用方法2自欺其人還不如直接拼接SQL來的實惠
方法3 受參數個數(做多2100個參數)限制,而且若傳的參數過多性能如何有待驗證,可以酌情使用
方法4 示例中采用的臨時表,其實可以換成表變量性能也許會更好些,不過寫法上有些繁瑣,可以具體的封裝成一個函數會好些(推薦)
方法5 使用xml傳參,既然有這種類型說明性能上應該還不錯,其它會比拼接SQL好很多,使用上也還比較方便,不過需要開發人員對xml查詢有一定了解才行(推薦)
方法6 tvp方式sql server2008以后才可以使用,很好很強大,若只為where in 的話可以定義幾個tvp where in問題就很容易解決了,而且是強類型也更容易理解(推薦)
不好去評論具體那種方法最好,還是那句老話合適的最好。

此文章屬懶惰的肥兔原創

您可能感興趣的文章:
  • SQLServer中使用擴展事件獲取Session級別的等待信息及SQLServer 2016中Session級別等待信息的增強
  • sqlserver 模糊查詢常用方法
  • SqlServer使用 case when 解決多條件模糊查詢問題
  • SqlServer中模糊查詢對于特殊字符的處理方法
  • MSSQL Server 查詢優化方法 整理
  • sqlserver 中charindex/patindex/like 的比較
  • SqlServer參數化查詢之where in和like實現詳解
  • SqlServer2016模糊匹配的三種方式及效率問題簡析

標簽:新余 宜春 金昌 濟寧 中衛 黃山 河源 貸款群呼

巨人網絡通訊聲明:本文標題《SqlServer參數化查詢之where in和like實現之xml和DataTable傳參介紹》,本文關鍵詞  SqlServer,參數,化,查詢,之,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SqlServer參數化查詢之where in和like實現之xml和DataTable傳參介紹》相關的同類信息!
  • 本頁收集關于SqlServer參數化查詢之where in和like實現之xml和DataTable傳參介紹的相關信息資訊供網民參考!
  • 推薦文章
    91av中文字幕| 国产资源在线一区| 国产乱码精品一区二区三区av| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲国产美国国产综合一区二区| 91精品国产综合久久精品麻豆| 亚洲欧洲在线免费| 欧美一级片久久久久久久| 国精产品一区二区| 分分操这里只有精品| 欧美美女一级片| 国产毛片欧美毛片久久久| 国产成人无码一区二区在线播放| 亚洲欧洲综合在线| 久久精品男人天堂av| 91久久久免费一区二区| 亚洲人成在线电影| 国产精品精品一区二区三区午夜版| 麻豆一区区三区四区产品精品蜜桃| 一二三四视频社区在线| 亚洲欧美日本一区| 男人午夜免费视频| 麻豆精品蜜桃视频网站| 亚洲视频一区在线观看| 日韩网站在线看片你懂的| 久久99精品久久久久久噜噜| 97神马电影| 免费av手机在线观看| 日本一区二区三区网站| 波多野结衣影片| 国产综合色产在线精品| 亚洲一区二区高清| 欧美一区二区视频在线观看2022 | 91精品国自产在线观看| av影院在线播放| 午夜av免费看| 伊人久久久久久久久久久久 | 久久婷婷色综合| 在线精品视频一区二区| 久久精品国产久精国产思思| 粉嫩精品一区二区三区在线观看| 老太脱裤让老头玩ⅹxxxx| 级毛片内射视频| 国产又粗又黄视频| 99精品视频在线观看| 欧美亚洲国产一区二区三区va | 在线精品视频免费播放| 精品国内自产拍在线观看| 成人在线看片| 久草综合在线观看| 午夜免费激情视频| 久久综合导航| 亚洲美女免费在线| 亚洲欧洲激情在线| 91丝袜脚交足在线播放| 久久久精品在线视频| 99热在线观看精品| 亚洲日本香蕉视频| 亚洲卡通欧美制服中文| 亚洲欧美国产精品va在线观看| 国产在线拍揄自揄视频不卡99| 国产人妻777人伦精品hd| 精品女人久久久| 人成网站在线观看| 亚洲免费视频成人| 国产亚洲欧洲在线| 国产精品一区二区a| 亚洲这里只有精品| 国产高潮久久久| 国产传媒日韩欧美成人| 在线看国产日韩| 国内精品小视频在线观看| 亚洲精品乱码久久久久久蜜桃91| 中文字幕在线播放一区| 国产绿帽一区二区三区| 中文字幕不卡在线观看| 日韩电影在线观看中文字幕| 亚洲bt天天射| av在线网址导航| 国产免费一区二区三区四区五区| 成人av在线播放网站| 欧美一区二区二区| 国产日韩在线观看av| 欧美成人黑人猛交| 国产精品久久久久久久妇| 成人一区二区三区在线观看| 欧美久久一二区| 国产精品久久久久不卡| 97在线播放视频| 日本免费观看视| 成人不卡免费av| 欧美va亚洲va| 97久久天天综合色天天综合色hd| 手机免费av片| 中文亚洲av片在线观看| 中文字幕国产一区二区| 亚洲欧美综合图区| 日本精品视频一区| 美女脱光内衣内裤| 日日摸夜夜添夜夜添精品视频| 欧美日韩国产色| 97国产精品免费视频| 久久久国内精品| 亚洲国产精品久| 岛国一区二区在线观看| 精品欧美一区二区久久| 高清av免费一区中文字幕| 午夜性福利视频| 丰满人妻一区二区三区四区53| 亚洲成人免费视| 97成人精品区在线播放| 逼特逼视频在线| 国产乱码久久久久久| 97久久精品人人澡人人爽| 日韩精品在线观看一区二区| 国产精品一区视频| www.免费av| 日韩av一二三| 在线不卡a资源高清| 91视频免费在线| 青青草原播放器| 超碰在线观看av| 精品久久久久久久久久久久久| 91成人精品网站| caopor在线视频| 中文字幕一区2区3区| 亚洲日本乱码在线观看| 欧美国产精品va在线观看| 国产精品久久中文字幕| 日本熟女毛茸茸| 国产精品二三区| 欧美成人免费大片| 波多野结衣乳巨码无在线| www.欧美色| 亚洲日本一区二区| 91精品国产91久久久久| 91蝌蚪视频在线观看| 国产精品国产av| 亚洲国产视频在线| 国产成人精品综合| 国产传媒免费观看| 神马午夜精品95| 欧美三级欧美一级| 国产精品v欧美精品∨日韩| 亚洲永久精品ww.7491进入| 久久99久久久欧美国产| 精品国产乱码久久久久久久久| 久久青青草综合| 成人一级黄色大片| 91原创在线视频| 日韩在线免费av| 久久精品国产sm调教网站演员| 欧美国产一级片| 亚洲成人av一区| 国产精品爽爽爽| 国产精品一区二区人妻喷水| 久久精品国产99国产| 亚洲黄色av网站| 亚洲一区三区视频在线观看| 日本特黄一级片| 亚洲欧美日韩一区| 日本久久精品视频| 香蕉视频在线观看黄| 日本午夜精品视频在线观看| 精品日产卡一卡二卡麻豆| 午夜精品一区二区三区在线观看| 国产亚洲第一页| 日韩美女视频一区二区| 日韩av大片免费看| 亚洲一二三四五| 精彩视频一区二区| 亚洲社区在线观看| 国产精品12345| 国产视频在线观看免费| 欧美三级电影网站| 久久人人九九| 久久久久久久久久久久久久久久久| 国产精品免费看片| 欧洲精品久久久| 美女搡bbb又爽又猛又黄www| 激情欧美日韩一区二区| 在线观看亚洲区| 亚洲精品无码久久久久久| 亚洲av少妇一区二区在线观看| 69久久99精品久久久久婷婷| 欧美污视频久久久| 黄色片免费观看视频| 无吗不卡中文字幕| 91中文字精品一区二区| av在线免费播放网址| 欧美国产精品专区| 国产成人精品在线| yjizz视频| 成人在线综合网| 欧美日韩xxxxx| 亚洲色图欧美自拍| 国产毛片一区二区| 久久天天躁狠狠躁夜夜av| 亚洲欧美自拍另类日韩| 美女视频黄频大全不卡视频在线播放| 日韩成人xxxx| 黄色一级在线视频| 天天干天天爱天天操| 亚洲加勒比久久88色综合| 日本手机在线视频| 免费观看黄色av| 精品久久久久久综合日本欧美| 欧美大片免费播放| a视频免费在线观看| 欧美一级黄色大片| 欧洲美女和动交zoz0z| 国产毛片毛片毛片毛片毛片| 欧美一区二区在线免费观看| 老汉色影院首页| 黄色av小说在线观看| 日韩精品高清在线观看| 91午夜在线观看| 少妇喷水在线观看| 亚洲美女福利视频网站| 91av在线免费播放| 精品一区二区影视| 美日韩精品视频免费看| aaa黄色大片| 久久天堂av综合合色蜜桃网| 国产精品91在线观看| 亚洲熟女少妇一区二区| 亚洲综合精品久久| 国产一区二区高清不卡| 黄色片网站在线免费观看| 欧美日韩三级在线| 黄黄视频在线观看| 日日躁夜夜躁白天躁晚上躁91| 亚洲欧美日韩一区二区三区在线| 亚洲无吗一区二区三区| 国产福利91精品一区二区三区| 午夜精品www| 91成人在线免费视频| 亚洲特黄一级片| 国产一区二区无遮挡| 亚洲精品国产无码| 日韩精品一区二区三区在线播放 | 久久免费视频观看| 国产又爽又黄无码无遮挡在线观看| 国产精品视频在线看| 91久久极品少妇xxxxⅹ软件| 国产午夜激情视频| 欧美日韩一区二区三区四区 | 亚洲国产美女视频| 天天色图综合网| 亚洲午夜精品一区二区| 亚洲欧美另类日韩| 色狠狠久久aa北条麻妃| 亚洲图片欧美另类| 国产精品第13页| 国产欧美精品一区二区三区| 一区二区自拍偷拍| 日韩高清免费在线| 永久免费黄色片| 国产欧美一区视频| 国产精选在线观看91| 自拍偷拍福利视频| 亚洲国产美女精品久久久久∴| wwwwxxxx日韩| 99久久国产综合精品女不卡| 国产精品一二区| 精品国产免费观看| 日韩免费视频一区二区| 久久午夜夜伦鲁鲁一区二区| 成人免费毛片app| 国产日韩欧美黄色| 亚洲精品男人的天堂| 欧美精品一区二区三区蜜桃 | 91九色单男在线观看| 日产精品久久久| 日韩久久久久久| 高清av免费看| 国产欧美日韩在线看| 国偷自产av一区二区三区小尤奈| 91极品身材尤物theporn| 亚洲视频一区二区三区| 亚洲av人人澡人人爽人人夜夜| 亚洲视频1区2区| 三区精品视频| 久久一综合视频| 5278欧美一区二区三区| 激情小说中文字幕| 91麻豆精品国产自产在线观看一区| 国产精品无码专区av在线播放 | 欧美一区二区视频在线| 欧美 中文字幕| 欧美激情在线播放| 欧美亚洲日本在线| 91麻豆精品国产91久久久久久 | 99久久精品无码一区二区毛片 | 国产精品高清无码| 精品亚洲一区二区| 欧美激情 亚洲| 亚洲成av人影院| 国产91沈先生在线播放| 国产成人亚洲精品青草天美| 成人免费大片黄在线播放| 中文字幕乱码在线观看| 在线精品高清中文字幕| 亚洲av无码一区二区三区人| 色就色 综合激情| 成年网站在线免费观看| 久久综合一区二区| 久久久精彩视频| 神马午夜电影一区二区三区在线观看| 久久久噜噜噜久久中文字免| 久久午夜无码鲁丝片| 精品免费国产一区二区三区四区| 日韩久久久久久久久久久| 亚洲九九爱视频| 免费观看亚洲视频| 不卡在线观看av| 国产一区二区三区四区五区在线 | 色偷偷一区二区三区| 久久人妻精品白浆国产| 国产精品久久午夜| 特级毛片在线免费观看| 国产成人在线观看免费网站| 国产伦精品一区二区三区照片91 | 台湾无码一区二区| 成人精品视频.| 精品无码久久久久国产| 亚洲人妻一区二区| 国产精品入口免费视| 岳乳丰满一区二区三区| 久久天天躁日日躁| 久久久久久久久久久网| 日韩精品极品视频| 伊人网在线视频观看| 欧美午夜精品一区| www.久久av.com| 亚洲一二三四在线观看| 亚洲中文字幕无码专区| 国产精品丝袜久久久久久app| 精品少妇人妻av一区二区| 粉嫩aⅴ一区二区三区四区五区| 国产欧美一区二区视频| 日韩电影一区二区三区四区| 成人两性免费视频| 色综合视频在线| 国产精品视频自在线| 国产片高清在线观看| 91精品国产沙发| 中文字幕一区二区免费| 久久人人看视频| 日韩一级片中文字幕| 欧美xxxx做受欧美| 久久亚洲精品国产| 久久69精品久久久久久国产越南| 日韩精品国产一区二区| 视频在线观看99| 免费在线视频一区二区| 国产亚洲人成网站在线观看| 欧美卡一卡二卡三| 亚洲视频在线免费观看| 91成人福利视频| 在线视频一区二区| 久久久精品国产sm调教网站| 一道本无吗dⅴd在线播放一区 | 成人国产精品免费观看动漫| 欧洲精品久久| 国产成a人亚洲精| 视频在线99| 91免费精品国自产拍在线不卡| 一区二区三区四区| 久久午夜电影网| 欧美在线观看视频免费| 中文在线资源观看网站视频免费不卡 | www.-级毛片线天内射视视| 久久伊99综合婷婷久久伊| 四虎4hu永久免费入口| 中文字幕欧美区| 精品国产一区三区| 一区二区三区日韩| www亚洲成人| 欧美午夜女人视频在线| 国产麻豆剧传媒精品国产| 欧美日韩大陆在线| 久久精品一区二区免费播放| 制服丝袜亚洲精品中文字幕| 色无极影院亚洲| 亚洲精品美女在线观看| 久久久久99精品成人片试看| xxx一区二区| 国产精华7777777| 欧洲精品久久久| 亚洲 欧美 激情 另类| 国产高清在线精品一区二区三区| 精品一二三四区| 色一情一区二区三区四区| 91蜜桃在线观看| 日韩一级片免费视频| 亚洲精品乱码久久久久久黑人| 爱情岛论坛vip永久入口| 色香蕉久久蜜桃| 免费成人蒂法网站| 亚洲国产日韩欧美在线图片 | 久久久一二三区| 欧美日韩成人网| 国产毛片久久久久| 91夜夜揉人人捏人人添红杏| 韩国理伦片一区二区三区在线播放| 天堂精品一区二区三区| 国产精品污污网站在线观看| 青青在线免费观看视频| 在线欧美日韩精品|