欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

[SQL]不要讓SQLServer幫你自動轉換SQL命令中的

系統 2391 0

為什么不要讓 SQLServer 幫你自動轉換 SQL 命令中的數據類型

Report Date ?? 2003/12/5

Prepared by ????

Article last modified on 2004-2-16

The information in this article applies to:

ü ???????? Microsoft SQL Server 2000,7.0

問題陳述 :

有一天,執行

SELECT * FROM XXX_ORIGINAL_20031205
where msgid =62010388000012

語句,結果 SQL Server 報告出錯: 將數據類型 varchar 轉換為 numeric 時出錯。

?

這是什么意思呢?

Msgid 這個字段的類型是: varchar(30) 。

?

環境:

數據庫服務器: Microsoft SQL Server 2000 以及 7.0 ;

數據庫服務器補丁: Microsoft SQL Server 2000 ServicePack1 ;

?

原因分析:

不是 SQL Server 突然不能從數字自動轉換為字符串,而是單單對這個字段的數值有問題,這也和這個字段中實際已存儲的字符串有關。

?

你看,我執行這個 SQL 語句是沒有問題,可以自動轉換:

SELECT * FROM XXXX_ORIGINAL_20031205
where recordid =62010388000012

recordid 這個字段的類型也是: varchar(30) 。

這為什么就可以呢?

?

為什么?

這是因為 msgid 字段的真實數值是類似于這樣的字符串 “12051113280101053509” ,由于你的 SQL 命令中要求拿字符串跟我們提供的這個數字 62010388000012 匹配,所以 SQLServer 默認要把這么多個 “12051113280101053509” 先統統轉換為數字,再去跟 62010388000012 匹配。

( 首先這就涉及到一個效率問題,轉換這么多 msgid 成為數字,再跟你的數字匹配,將是一個多么大的浪費啊 )

當然,這回 SQLServer 轉不過來了,因為 “12051113280101053509” 換為數字實在太大了,超出了范圍,所以你看 SQLServer 于是乎報告 將數據類型 varchar 轉換為 numeric 時出錯 ,他指的就是把歷史數據 “12051113280101053509” 這個 varchar(30) 轉成 numeric 不行,而不是把你 SQL 腳本傳遞的參數 62010388000012 轉換失敗。

?

讓我們看看另一種形式的錯誤,就更清楚了:

我們執行

SELECT * FROM XXXX_ORIGINAL_20031205
where msgid=120

命令就會得到錯誤:

varchar '12050003010101026986' 的轉換溢出了 int 列。超出了最大整數值。

?

這個錯誤,是不是很清楚地表明了 SQLServer 在幫你執行 SQL 命令時背后所作的事情?

他試圖幫你主動把記錄中的這個字段轉換成你在 SQL 命令中指明的那個數據類型。

?

我的建議:

很多時候,我們懶得去看某個字段到底是什么類型,是 char ,還是 tinyint ,還是 bool ,還是 varchar ,我們就隨便寫一個數字,讓聰明的 SQL Server 自己去判斷該轉成什么。

但是,第一, SQL Server 不是轉換你的腳本命令中的數值,而是轉換已有的歷史數據到你指定的那個類型,所以會增加執行時間;第二,容易轉換出錯。

所以,切忌讓 SQLServer 自己判斷,自動幫你轉換,那樣將降低執行效率,而且增加出錯幾率。你能夠顯式告訴 SQL Server 你的數據類型的話,就請一定這么做。

?

?

Writen by zhengyun.NoJunk(at)tomosoft.dot.com

Disclaimers

本文檔所包含的信息代表了在發布之日, ZhengYun 對所討論問題的當前看法, Zhengyun 不保證所給信息在發布之日以后的準確性。

本文檔僅供參考。對本文檔中的信息, Zhengyun 不做任何明示或默示的保證。

用戶必須遵守所有適用的版權法。在不對版權法所規定的權利加以限制的情況下,如未得到 zhengyun CSDN.Net 明確的書面許可,不得出于任何目的、以任何形式或手段(電子的、機械的、影印、錄制等等)復制、傳播本文的任何部分,也不得將其存儲或引入到檢索系統中。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12744


[SQL]不要讓SQLServer幫你自動轉換SQL命令中的數據類型


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91麻豆精品一区二区三区 | 一区二区三区日本在线观看 | 五月天婷五月天综合网站 | 亚洲一区二区三区久久精品 | 狠狠五月深爱婷婷网免费 | 一级欧美视频 | 亚洲韩国精品 | 欧美双插 | 欧美极品欧美精品欧美视频 | 蜜桃精品导航 | 国产欧美成人 | 色欧美亚洲 | 五月婷婷在线播放 | 久9久9 | 亚洲精品一区久久久久久 | 看了让人下面流水的视频 | 婷婷午夜 | 日韩中文字幕一区 | 亚洲天堂在线播放 | 天堂资源8中文最新版 | 精品亚洲永久免费精品 | 丰满少妇久久久久久久 | 色呦呦在线观看视频 | 亚洲欧洲日韩国产aa色大片 | 极品嫩模私拍后被潜在线观看 | 国产欧美在线视频 | 亚洲国产综合网 | 亚洲性69影院在线观看 | 国产精品欧美一区二区在线看 | 国产精品久久久久久无码人妻 | 欧美一区二区三区爽大粗免费 | 一区二区三区网站在线免费线观看 | 奇米第四狠狠777高清秒播 | 中文字幕av网 | 久久午夜精品 | 欧美视频在线免费 | 国产高清精品一区 | 日韩免费黄色片 | 日韩和的一区二在线 | 夜夜爱网站 | 99精品视频3 |