2010-11-10 29 views
2

投在我的存儲過程爲什麼我在存儲proceure

爲什麼我要投的過程中VARCHAR(不寫完整的存儲過程) ,而我在DB COURSE_ID爲int型,鑄造它的工作原理後,正確的可能是什麼原因

@course int =null, 
    SET @query = @query + 'Where course_id='+ cast(@course as varchar) 

回答

5

VARCHAR + INT表達,VARCHAR是含蓄轉換爲INT,而不是相反。

這個查詢:

SELECT '12' + 345 

將返回357,不'12345',而這一個:

SELECT 'ab' + 1 

會失敗,而不是返回'ab1'

如果你想字符串連接,你應該使用明確的演員,這是你在做什麼。

+0

感謝greeat的解釋 – NoviceToDotNet 2010-11-10 15:40:27

+0

所以我們完整的將永遠是字符串形式不是嗎?也我想知道varchr只用於字符串類型 – NoviceToDotNet 2010-11-10 17:15:53

+0

也在我的數據庫中的一個更多的困惑course_id的類型是int,我正在使它與字符串類型比較它是如何工作的 – NoviceToDotNet 2010-11-10 17:18:02

2

因爲當你使用動態SQL時,那麼sql字符串需要是一個字符串數據類型,並且你不能在不轉換int的情況下將int連接到一個字符串。你必須得到int作爲一個字符串,然後將其添加到字符串的其餘部分SQL查詢

+0

你的解釋也有很大的幫助,謝謝先生 – NoviceToDotNet 2010-11-10 17:19:38

+0

,但先生一個混淆是,當我將@course轉換爲varchar類型,那麼如何將int數據類型列值與字符串類型值進行比較 – NoviceToDotNet 2010-11-10 17:22:46

1

或者,你可以只將變量定義爲varchar開頭。

如果此變量可以爲null,那麼您也將遇到問題,因爲null連接到一個字符串是null。

+0

不,我checkig爲這個isNull屬性就像if @course不爲空 – NoviceToDotNet 2010-11-10 15:37:17

+0

那麼varchar也可以保存int類型的值嗎? – NoviceToDotNet 2010-11-10 17:23:55

+0

確定它可以,但您希望確保只有整數從應用程序端發送給它,因爲如果使用varchar也可以接受的值「a」填充值,查詢將失敗。 – HLGEM 2010-11-10 18:30:17

相關問題