我想知道是否有人可以請我用一種方法檢索表信息,包括表中存儲的實際當前數據的信息......我正在使用SQL Server 2008 R2和下面是當前腳本我已經...SQL:獲取表/數據信息
SELECT
Sch.name AS 'Schema',
Tb.Name AS 'Table',
C.Name AS 'Column',
Tp.Name AS 'Type',
C.max_length,
C.precision,
C.scale
FROM Sys.Tables Tb
JOIN Sys.Schemas Sch
ON Sch.Schema_Id = Tb.Schema_Id
JOIN Sys.Columns C
ON C.Object_Id = Tb.Object_Id
JOIN Sys.Types Tp
ON Tp.System_Type_Id = C.System_Type_Id
WHERE Tp.name = 'numeric'
AND C.scale > 4
ORDER BY Sch.name ASC, Tb.name ASC, C.name ASC
此腳本將檢索所有我需要爲每個表我在我的數據庫中的信息。然後我有另一個腳本,我手動輸入我想要的信息從表和列。
SELECT 'Numeric Count' AS CounterType
, MAX(LEN(CAST(FLOOR(beca_proy_precio) AS VARCHAR(38)))) AS '1'
, MAX(LEN(CAST(FLOOR(beca_proy_precio_dol) AS VARCHAR(38)))) AS '2'
, MAX(LEN(CAST(FLOOR(beca_proy_tc) AS VARCHAR(38)))) AS '3'
FROM Comercial.beca_proyectada
UNION ALL
SELECT 'Decimal Count' AS CounterType
, MAX(LEN(CAST(REVERSE(STUFF(CAST(beca_proy_precio % 1 AS VARCHAR(38)), 1, 2, '')) AS DECIMAL(38, 0)))) AS '1'
, MAX(LEN(CAST(REVERSE(STUFF(CAST(beca_proy_precio_dol % 1 AS VARCHAR(38)), 1, 2, '')) AS DECIMAL(38, 0)))) AS '2'
, MAX(LEN(CAST(REVERSE(STUFF(CAST(beca_proy_tc % 1 AS VARCHAR(38)), 1, 2, '')) AS DECIMAL(38, 0)))) AS '3'
FROM Comercial.beca_proyectada
這樣做是它得到最長不宜LARGEST(整體和小數部分seperately)數字在指定的列值。然後它返回最長整數和十進制數的長度。
例如: 第1行 - 940.34910 => 3的整數,4位小數 第2行 - 1.1304902 => 1點的整數,7個小數
因此,在這種情況下,將最長的整數返回3和7爲最長十進制數
最後澄清我要做的是: 加入第2個腳本,其中第2個腳本將獲得每個表/列的值第1個腳本返回...輸出類似這個:
Schema/Ta ble /列/類型/最大長度/精度/比例/最長整數/最長十進制
預先感謝您提供的任何幫助!
您可以使用[sp_executesql](http://msdn.microsoft.com/zh-cn/library/ms188001.aspx)從上面的查詢構建和執行sql。 – 2012-03-09 15:10:00
@NikolaMarkovinović我不完全確定你的意思是...如果我運行它就像那個ID仍然放在參數,而我作爲一個SP執行它...我想它動態加載數據,而第一個腳本是正在執行...每行都是該腳本中的表的列,因此我希望第二個腳本可以加載該特定列的信息... – 2012-03-09 15:18:33
您可以製作查詢。爲此,聲明從模式定義查詢中讀取並在某個varchar變量中構建select的遊標。完成後,調用sp_executesql爲您提供結果。這很難,容易出錯,但我想不出另一種方式。附:一定要檢查頁面底部的示例以查看命令是如何構建的。 – 2012-03-09 15:26:26