您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關SQL Server中怎么實現數據類型轉換,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
1 顯式轉換
顯示轉換是將某種數據類型的表達式顯式轉換為另一種數據類型。常用的是CAST 和 CONVERT 函數。
CAST: CAST ( expression AS data_type )CONVERT: CONVERT (data_type[(length)], expression [, style])
參數 expression 是任何有效的 Microsoft SQL Server表達式。data_type 目標系統所提供的數據類型,不能使用用戶定義的數據類型。
2 隱性轉換
隱性轉換對于用戶是不可見的,由SQL Server 引擎自動處理。 隱性轉換自動將數據從一種數據類型轉換成另一種數據類型。例如,如果一個 smallint 變量和一個 int 變量相比較,這個 smallint 變量在比較前即被隱性轉換成 int 變量。 當從一個 SQL Server 對象的數據類型向另一個轉換時,一些隱性和顯式數據類型轉換是不支持的。例如,nchar 數值根本就不能被轉換成 image 數值。nchar 只能顯式地轉換成 binary,隱性地轉換到 binary 是不支持的。nchar 可以顯式地或者隱性地轉換成 nvarchar。
3 隱性轉換的風險
隱性轉換有的時候非常方便,可以簡化SQL 腳本,但是這里面也孕育著潛在的風險,可能會出現在腳本一開始運行的時候都是正常的,但卻某一個時間點之后,程序莫名出現錯誤。下面舉一個現實項目中的例子來說明。在SQL Server 2008中有一個表,需要從兩個不同的數據表中拉取數據,由于這兩個數據表屬于不同的系統,其主鍵類型是不同的,一個是int類型,一個是GUID,一開始想著這兩個都可以轉換成字符類型進行存儲。所以就在表中建立一個nvarchar(50)的混合ID列作為主鍵。如下圖所示:
一開始拉取的數據并未有GUID的值,都是INT類型轉換過來的數據,所以SQL腳本運行的正常,但是突然某一次運行時,出現了“在將 nvarchar 值 '4C185367-F004-41FE-8A0A-DB4E819B1FF2' 轉換成數據類型 int 時失敗。”的錯誤。如下圖所示:
定位到腳本,執行的SQL如下:
select * from dbo.Demo where 混合ID=305
其中主鍵中的數據有GUID轉換的字符型,也有INT轉換的字符串,示例數據如下:
但是如果執行下面的SQL,則都是正常執行:
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 序號=2select * from dbo.Demo where 混合ID='305' and 名稱='INT'select * from dbo.Demo where 混合ID='305'
select * from dbo.Demo where 混合ID=305在執行時,SQL Server會將nvarchar類型的隱性轉換成int類型,如果數據中沒有GUID類型的字符,則轉換正常,如果有,當進行GUID字符到INT的隱性轉換時,則轉換失敗。
關于SQL Server中怎么實現數據類型轉換就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。