投在我的存儲過程爲什麼我在存儲proceure
爲什麼我要投的過程中VARCHAR(不寫完整的存儲過程) ,而我在DB COURSE_ID爲int型,鑄造它的工作原理後,正確的可能是什麼原因
@course int =null,
SET @query = @query + 'Where course_id='+ cast(@course as varchar)
投在我的存儲過程爲什麼我在存儲proceure
爲什麼我要投的過程中VARCHAR(不寫完整的存儲過程) ,而我在DB COURSE_ID爲int型,鑄造它的工作原理後,正確的可能是什麼原因
@course int =null,
SET @query = @query + 'Where course_id='+ cast(@course as varchar)
在VARCHAR + INT
表達,VARCHAR
是含蓄轉換爲INT
,而不是相反。
這個查詢:
SELECT '12' + 345
將返回357
,不'12345'
,而這一個:
SELECT 'ab' + 1
會失敗,而不是返回'ab1'
如果你想字符串連接,你應該使用明確的演員,這是你在做什麼。
因爲當你使用動態SQL時,那麼sql字符串需要是一個字符串數據類型,並且你不能在不轉換int的情況下將int連接到一個字符串。你必須得到int作爲一個字符串,然後將其添加到字符串的其餘部分SQL查詢
你的解釋也有很大的幫助,謝謝先生 – NoviceToDotNet 2010-11-10 17:19:38
,但先生一個混淆是,當我將@course轉換爲varchar類型,那麼如何將int數據類型列值與字符串類型值進行比較 – NoviceToDotNet 2010-11-10 17:22:46
或者,你可以只將變量定義爲varchar開頭。
如果此變量可以爲null,那麼您也將遇到問題,因爲null連接到一個字符串是null。
不,我checkig爲這個isNull屬性就像if @course不爲空 – NoviceToDotNet 2010-11-10 15:37:17
那麼varchar也可以保存int類型的值嗎? – NoviceToDotNet 2010-11-10 17:23:55
確定它可以,但您希望確保只有整數從應用程序端發送給它,因爲如果使用varchar也可以接受的值「a」填充值,查詢將失敗。 – HLGEM 2010-11-10 18:30:17
感謝greeat的解釋 – NoviceToDotNet 2010-11-10 15:40:27
所以我們完整的將永遠是字符串形式不是嗎?也我想知道varchr只用於字符串類型 – NoviceToDotNet 2010-11-10 17:15:53
也在我的數據庫中的一個更多的困惑course_id的類型是int,我正在使它與字符串類型比較它是如何工作的 – NoviceToDotNet 2010-11-10 17:18:02