校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > SQL Server數(shù)據(jù)類型轉(zhuǎn)換方法

SQL Server數(shù)據(jù)類型轉(zhuǎn)換方法

熱門標簽:臺灣外呼系統(tǒng)軟件 南京怎么申請400這種電話 南通智能外呼系統(tǒng)怎么樣 地圖標注可以編輯地名嗎 地圖標注跑線下市場 疫情時期電話機器人 真3地圖標注 濮陽清豐400開頭的電話申請 樂昌電話機器人

在SQL Server日常的函數(shù)、存儲過程和SQL語句中,經(jīng)常會用到不同數(shù)據(jù)類型的轉(zhuǎn)換。在SQL Server有兩種數(shù)據(jù)轉(zhuǎn)換類型:一種是顯性數(shù)據(jù)轉(zhuǎn)換;另一種是隱性數(shù)據(jù)轉(zhuǎn)換。下面分別對這兩種數(shù)據(jù)類型轉(zhuǎn)換進行簡要的說明:

1 顯式轉(zhuǎn)換

顯示轉(zhuǎn)換是將某種數(shù)據(jù)類型的表達式顯式轉(zhuǎn)換為另一種數(shù)據(jù)類型。常用的是CAST 和 CONVERT 函數(shù)。

 CAST: CAST ( expression AS data_type )
 CONVERT: CONVERT (data_type[(length)], expression [, style])

參數(shù) expression 是任何有效的 Microsoft SQL Server表達式。data_type 目標系統(tǒng)所提供的數(shù)據(jù)類型,不能使用用戶定義的數(shù)據(jù)類型。

2 隱性轉(zhuǎn)換

隱性轉(zhuǎn)換對于用戶是不可見的,由SQL Server 引擎自動處理。 隱性轉(zhuǎn)換自動將數(shù)據(jù)從一種數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型。例如,如果一個 smallint 變量和一個 int 變量相比較,這個 smallint 變量在比較前即被隱性轉(zhuǎn)換成 int 變量。 當從一個 SQL Server 對象的數(shù)據(jù)類型向另一個轉(zhuǎn)換時,一些隱性和顯式數(shù)據(jù)類型轉(zhuǎn)換是不支持的。例如,nchar 數(shù)值根本就不能被轉(zhuǎn)換成 image 數(shù)值。nchar 只能顯式地轉(zhuǎn)換成 binary,隱性地轉(zhuǎn)換到 binary 是不支持的。nchar 可以顯式地或者隱性地轉(zhuǎn)換成 nvarchar。

3 隱性轉(zhuǎn)換的風險

隱性轉(zhuǎn)換有的時候非常方便,可以簡化SQL 腳本,但是這里面也孕育著潛在的風險,可能會出現(xiàn)在腳本一開始運行的時候都是正常的,但卻某一個時間點之后,程序莫名出現(xiàn)錯誤。下面舉一個現(xiàn)實項目中的例子來說明。在SQL Server 2008中有一個表,需要從兩個不同的數(shù)據(jù)表中拉取數(shù)據(jù),由于這兩個數(shù)據(jù)表屬于不同的系統(tǒng),其主鍵類型是不同的,一個是int類型,一個是GUID,一開始想著這兩個都可以轉(zhuǎn)換成字符類型進行存儲。所以就在表中建立一個nvarchar(50)的混合ID列作為主鍵。如下圖所示:

一開始拉取的數(shù)據(jù)并未有GUID的值,都是INT類型轉(zhuǎn)換過來的數(shù)據(jù),所以SQL腳本運行的正常,但是突然某一次運行時,出現(xiàn)了“在將 nvarchar 值 '4C185367-F004-41FE-8A0A-DB4E819B1FF2' 轉(zhuǎn)換成數(shù)據(jù)類型 int 時失敗。”的錯誤。如下圖所示:

定位到腳本,執(zhí)行的SQL如下:

select * from dbo.Demo where 混合ID=305

其中主鍵中的數(shù)據(jù)有GUID轉(zhuǎn)換的字符型,也有INT轉(zhuǎn)換的字符串,示例數(shù)據(jù)如下:

但是如果執(zhí)行下面的SQL,則都是正常執(zhí)行:

select * from dbo.Demo where 混合ID=305 and 名稱='INT'

select * from dbo.Demo where 混合ID=305 and 序號='2'

select * from dbo.Demo where 混合ID=305 and 序號=2

select * from dbo.Demo where 混合ID='305' and 名稱='INT'

select * from dbo.Demo where 混合ID='305'

結(jié)果如下:

出現(xiàn)上述錯誤的結(jié)果應該是這樣的:

select * from dbo.Demo where 混合ID=305在執(zhí)行時,SQL Server會將nvarchar類型的隱性轉(zhuǎn)換成int類型,如果數(shù)據(jù)中沒有GUID類型的字符,則轉(zhuǎn)換正常,如果有,當進行GUID字符到INT的隱性轉(zhuǎn)換時,則轉(zhuǎn)換失敗。

以上就是本文的全部內(nèi)容,希望對大家進行SQL Server數(shù)據(jù)類型轉(zhuǎn)換有所幫助。

您可能感興趣的文章:
  • 詳解SQL Server中的數(shù)據(jù)類型
  • 詳解MySQL數(shù)據(jù)類型int(M)中M的含義
  • mysql存儲引擎和數(shù)據(jù)類型(二)
  • Java數(shù)據(jù)類型與MySql數(shù)據(jù)類型對照表
  • SQL Server比較常見數(shù)據(jù)類型詳解
  • SQLite教程(七):數(shù)據(jù)類型詳解
  • SQL Server數(shù)據(jù)類型char、nchar、varchar、nvarchar的區(qū)別淺析
  • sql使用cast進行數(shù)據(jù)類型轉(zhuǎn)換示例
  • SQL2005中char nchar varchar nvarchar數(shù)據(jù)類型的區(qū)別和使用環(huán)境講解
  • SQL的常用數(shù)據(jù)類型列表詳解

標簽:通遼 陜西 河北 阿里 馬鞍山 福建 廣安 南京

巨人網(wǎng)絡(luò)通訊聲明:本文標題《SQL Server數(shù)據(jù)類型轉(zhuǎn)換方法》,本文關(guān)鍵詞  SQL,Server,數(shù)據(jù),類型,轉(zhuǎn)換,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL Server數(shù)據(jù)類型轉(zhuǎn)換方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQL Server數(shù)據(jù)類型轉(zhuǎn)換方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 鹤峰县| 黎平县| 远安县| 望谟县| 靖边县| 广饶县| 朔州市| 宁国市| 庆元县| 友谊县| 嘉善县| 长宁区| 浮梁县| 浪卡子县| 木兰县| 南投县| 荆州市| 瓦房店市| 刚察县| 彩票| 秦皇岛市| 安仁县| 怀化市| 曲沃县| 开鲁县| 固原市| 综艺| 永善县| 汕头市| 右玉县| 修文县| 调兵山市| 黄浦区| 政和县| 镇雄县| 山阳县| 玉山县| 临泉县| 济南市| 固阳县| 大名县|