程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server數據類型轉換辦法

SQL Server數據類型轉換辦法

編輯:MSSQL

SQL Server數據類型轉換辦法。本站提示廣大學習愛好者:(SQL Server數據類型轉換辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server數據類型轉換辦法正文


在SQL Server平常的函數、存儲進程和SQL語句中,常常會用到分歧數據類型的轉換。在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 序號=2

select * 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數據類型轉換有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved