激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術|

服務器之家 - 數(shù)據(jù)庫 - Sql Server - SQL Server數(shù)據(jù)類型轉換方法

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

2020-05-03 15:49JackWang-CUMT Sql Server

這篇文章主要為大家詳細介紹了SQL Server數(shù)據(jù)類型轉換方法,感興趣的小伙伴們可以參考一下

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

1 顯式轉換

顯示轉換是將某種數(shù)據(jù)類型的表達式顯式轉換為另一種數(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 隱性轉換

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

3 隱性轉換的風險

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

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

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

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

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
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'

結果如下:

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

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

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

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

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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 亚洲电影在线观看高清免费 | 成人午夜天堂 | 日韩视频一 | 国产一国产一级毛片视频在线 | 久久久久亚洲精品国产 | a一级黄 | 在线观看免费污视频 | 欧美日韩在线免费观看 | 亚洲免费视频大全 | 黄色毛片一级 | 免费一级毛片电影 | 看全色黄大色黄大片女图片 | 免费黄网站在线播放 | 91一区二区三区久久久久国产乱 | 成年人小视频在线观看 | 久久精品日产高清版的功能介绍 | 国产精品美女久久久久久网站 | 国产草草视频 | 欧美性生活网站 | a一级黄色大片 | 蜜桃av鲁一鲁一鲁一鲁 | 在线中文字幕亚洲 | av免费在线网 | 国产一级午夜 | 免费午夜视频 | 92自拍视频| 99re66热这里只有精品8 | 中文字幕专区高清在线观看 | 欧美 国产 亚洲 卡通 综合 | 亚洲一区在线免费视频 | 一区二区三区视频在线播放 | 欧美精品久久久久久久久久 | 久久99精品国产自在现线 | 久久99精品久久久久久国产越南 | 三人弄娇妻高潮3p视频 | 欧美1区2区 | 精品av在线播放 | 国产在线地址 | 国内精品久久久久久久久久 | 免费在线观看午夜视频 | 国产福利不卡一区二区三区 |