我想知道是否有人可以请我用一种方法检索表信息,包括表中存储的实际当前数据的信息......我正在使用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