1
執行我有一個select語句如下:獲得不同的結果,當代碼在存儲過程
SELECT TOP 1 TRY_CONVERT(UNIQUEIDENTIFIER,'6B75045F-22BF-4BD0-8170-32FA7DBF2A2xC')
FROM [sch_ImmAnn].[viw_mdlImmAnnEle_Formulae]
UID是故意不正確的,當我執行該語句,NULL值返回,如我所料。但是,如果我編碼存儲過程中這個語句,如下所示:
CREATE PROCEDURE [sch_Common].[usp_TestValid_UID]
@ExecUID UNIQUEIDENTIFIER
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT TOP 1 TRY_CONVERT(UNIQUEIDENTIFIER,@ExecUID)
FROM [sch_ImmAnn].[viw_mdlImmAnnEle_Formulae]
END
它,當我用相同的UID執行它返回一個錯誤穿過作爲參數:
誤差變換數據類型varchar到uniqueidentifier。
我該如何解決這個問題?爲什麼會發生?
您將'@ ExecUID'聲明爲唯一標識符,然後嘗試將其轉換爲唯一標識符。我想你想聲明'@ ExecUID'作爲varchar? – waka
'viw_mdlImmAnnEle_Formulae'是一種視圖,它本身會嘗試進行轉換嗎?你正在轉換一個參數(它已經是正確的類型),所以應該沒有任何影響(但是優化器可以自由地評估視圖中的行,或者不是,因爲它選擇了,所以傳遞一個文字不是和傳遞參數一樣)。 –
waka,你是對的 - 這就是它不工作的原因。一旦我將@ExecUID更改爲varchar,就沒有問題。當你看到解決方案時總是如此明顯! Tks喬。 – mediaeval