srv_convert (擴充預存程式 API)

適用於:SQL Server

重要

SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 CLR 整合。

將數據從某個數據類型變更為另一個數據類型。

語法

  
int srv_convert (  
SRV_PROC *  
srvproc  
,  
int  
srctype  
,  
void *  
src  
,  
DBINT  
srclen  
,  
int  
desttype  
,  
void *  
  dest  
,  
DBINT  
destlen  
);  

引數

srvproc
這是特定用戶端連接句柄之SRV_PROC結構的指標。 結構包含擴充預存程式 API 用來管理應用程式與客戶端之間通訊和數據的所有控制資訊。 如果提供 srvproc 句柄,則會在發生錯誤時傳遞至擴充預存程式 API 錯誤處理程式函式。

srctype
指定要轉換之數據的數據類型。 此參數可以是任何擴充預存程式 API 數據類型。

src
這是要轉換之數據的指標。 此參數可以是任何擴充預存程式 API 數據類型。

srclen
指定要轉換之數據的長度,以位元組為單位。 如果 srclen 為 0,srv_convert將 null 值放在目的地變數中。 除非它是 0,否則固定長度數據類型會忽略此參數,在此情況下,源數據會假設為 NULL。 若為 SRVCHAR 數據類型的數據,長度為 -1 表示字串為 Null 終止。

desttype
指定要將來源轉換成的數據類型。 此參數可以是任何擴充預存程式 API 數據類型。

dest
這是接收已轉換數據之目的地變數的指標。 如果這個指標為 NULL,srv_convert呼叫使用者提供的錯誤處理程式,如果有的話,並傳回 -1。

如果 desttype 是 SRVDECIMAL 或 SRVNUMERIC,dest 參數必須是 DBNUMERIC 或 DBDECIMAL 結構的指標,且結構的有效位數和小數位數位段已設定為所需的值。 您可以使用 DEFAULTPRECISION 來指定預設有效位數,而 DEFAULTSCALE 則指定預設小數位數。

destlen
指定目的地變數的長度,以位元組為單位。 固定長度數據類型會忽略此參數。 對於 SRVCHAR 類型的目的地變數,destlen 的值必須是目的地緩衝區空間的總長度。 SRVCHAR 或 SRVBINARY 類型的目的地變數長度 -1 表示有足夠的空間可用。 對於 srvchar 類型的目的地變數,長度為 -1 會導致字元字串以 Null 終止。

傳回

如果數據類型轉換成功,則轉換的數據長度,以位元組為單位。 當srv_convert遇到不支援的轉換要求時,它會呼叫開發人員提供的錯誤處理程式,如果有的話,會設定全域錯誤號碼,並傳回 -1。

備註

srv_willconvert函式會判斷是否允許特定轉換。

轉換成近似數值數據類型SRVFLT4或SRVFLT8可能會導致某些精確度遺失。 從近似數值數據類型轉換成 SRVCHAR 或 SRVTEXT SRVFLT4或SRVFLT8,也會導致某些精確度遺失。

轉換成 SRVFLTx、SRVINTx、SRVMONEY、SRVMONEY4、SRVDECIMAL 或 SRVNUMERIC,如果數位大於目的地的最大值,或如果數位小於目的地的最小值,則會導致溢位。 如果轉換至 SRVCHAR 或 SRVTEXT 時發生溢位,則產生的值的第一個字元會包含星號 。

將 SRVCHAR 轉換成 SRVBINARY 時, srv_convert 會將 SRVCHAR 解譯為十六進位,不論字串是否包含前置 0。 將 SRVBINARY 轉換成 SRVCHAR 時, srv_convert 建立不含前置 0 的十六進位字串。 在其他所有情況下,轉換至 SRVBINARY 數據類型或從 SRVBINARY 數據類型轉換是直接的位複本。

在某些情況下,將數據類型轉換成本身會很有用。 例如,將 SRVCHAR 轉換成 SRVCHAR,其 destlen 為 -1 會將 Null 終止符新增至字串。

如需數據類型和擴充預存程式 API 資料類型轉換的描述,請參閱數據類型(擴充預存程式 API)。

srv_convert函式可能會因為數個原因而失敗:

  • 要求的轉換無法使用。

  • 轉換會導致目的變數中的精確度截斷、溢位或遺失。

  • 將字元字串轉換成數值數據類型時發生語法錯誤。

重要

您應該徹底檢閱擴充預存程式的原始程式碼,而且您應該先測試已編譯的 DLL,再於實際執行伺服器上安裝它們。 如需安全性檢閱和測試的相關信息,請參閱此 Microsoft 網站

另請參閱

srv_setutype (擴充預存程式 API)
srv_willconvert (擴充預存程式 API)