2012-02-29 64 views
0

有沒有辦法知道查詢中包含文字的數據類型?如何知道在sql中硬編碼值時返回的數據類型

例如,我很確定select 1返回一個int,但我怎麼知道它?

我可以做到這一點select 1 + "2"這將回應implicit conversion from 'VARCHAR' to 'INT' is not allowed告訴我,1必須是INT。但是有更好的方法嗎?

編輯:我的具體用例如下: 我編寫/修改硬編碼某個值的存儲過程。也許我正在替換一個曾經從表格中抓取的字段,或者我正在編寫一個有文字的新程序。

如果我使用錯誤的ResultSet.getX(),執行此存儲過程的java將失敗。 沒有經過java測試的開銷,如果有一個簡單的方法可以告訴我某個列表的類型是什麼,那將會很好。

+0

是CAST'並在java中使用該數據類型無效嗎? – 2012-03-01 00:44:33

+0

更新了我的答案。 – 2012-03-01 21:05:05

+0

由於SQurrieL支持它,顯然有一種方法可以做到這一點。 – user606723 2013-08-09 19:51:00

回答

0

它取決於例如PHP和MySql你可以檢索字段的名稱和類型。 你能提供更多的信息嗎?

+0

這不是一個答案,你需要什麼樣的信息?我希望找到一種方法來只使用SQL。顯然,PHP必須有一種方法來確定類型是什麼。它是如何做到的? – user606723 2012-02-29 23:46:56

+0

如果您使用的是php:http://php.net/manual/en/function.sybase-fetch-field.php – Gabs 2012-02-29 23:48:59

+0

@ user606723您的問題的答案基本上是否定的,但我們知道您有一個特定的問題,重新嘗試解決問題,如果您告訴我們更多關於「問題」的信息,而不是您認爲可以解決問題的方法,那麼可能會解決這個問題。 – 2012-02-29 23:49:39

0

當你在修改存儲過程時,你肯定知道你在那個時間是什麼樣的數據,對吧?如果是這樣,您可以將該信息存儲在查找表中,以便日後查看。

除此之外,我能想到的唯一情況是如果您動態創建了一個包含結果的表,然後查詢syscolumns,但這可能有點矯枉過正。

+0

運行它我沒有問題。基本上,我希望能夠在運行後驗證某個列是什麼類型。 – user606723 2012-02-29 23:50:47

+0

那麼,必須有一種方法來做到這一點......任何API等都不知道它是什麼... – user606723 2012-03-01 23:02:11

+0

@ user606723你不能使用ResultSet.getObject()嗎?然後你可以使用java來查找對象的實際類型。或者你只是問你如何避免這樣做?如果你只是想避免它......爲什麼?你認爲你會獲得顯着的業績增長嗎? (僅供參考,我只是想出了一些想法......我仍然在思考如何直接在SQL中執行此操作,並會在我想到某些事情時做出回答)。 – 2012-03-02 05:41:42

0

自從我使用Sybase以來已經有一段時間了,但曾經有一些系統表可以從中提取數據類型; sysobjects,syscolumns和systypes。例如,要返回表帳戶中所有列的數據類型:

select c.name, t.name from systypes t join syscolumns c on t.xusertype=c.xusertype where id = object_id('Accounts') 
+0

您可以使用'sp_help'在表格中找到數據類型,但是如何僅爲查詢做到這一點? – user606723 2012-03-01 00:08:58

+0

這個例子是一個查詢。你會用什麼編程語言來處理這個任務? – 2012-03-01 00:24:00

相關問題