我想知道是否有人可以通过检索表信息的方式来启发我,包括有关表存储的实际当前数据的信息...我正在使用 SQL Server 2008 R2 ,以下是我目前的剧本......
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
这样做是指在指定的列中获得最长的NOT LARGEST(单独的全部和小数部分)数值。然后它返回最长整数和十进制数的长度。
例如: 第1行 - 940.34910 => 3整数,4位小数 第2行 - 1.1304902 => 1个整数,7位小数
因此,在这种情况下,它将返回3表示最长的整数,7表示最长的十进制数
最后澄清一下我要做的是: 加入2个脚本,第二个脚本将获取第一个脚本返回的每个表/列的值...输出如下内容:
架构/表格/列/类型/最大长度/精度/比例/最长整数/最长十进制
提前感谢您提供的任何帮助!!
答案 0 :(得分:0)
这是一项工作。
创建一个临时表来保存结果和信息
使用插入
的查询填充您的架构数据然后使用游标和exec()
e.g。这个列出了当前数据库中的所有表以及它们中的记录数。
Create #Results (TableName VarChar(255) not null, TableCount null)
insert into #Results(TableName) Select Name From Sys.Tables
Declare @TableName VarChar(255)
Declare @QueryString VarChar(255)
Declare TableNameCursor Cursor For Select TableName From #Results
Open TableNameCursor
Fetch Next From TableNameCursor Into @TableName
While @@Fetch_Status = 0
Begin
Select @QueryString = 'Declare @rc int Select @rc = Count(*) From ' + @TableName + ' + Insert #Results Select ''' + @TableName + ''',@rc'
Exec(@QueryString)
Fetch Next From TableNameCursor Into @TableName
End
Close TableNameCursor
DeAllocate TableNameCursor
Select * from #Results
提示,当你想要用Print @QueryString替换Exec(@QueryString)时,你可以搞清楚引号。
哦,你正在执行的查询有它自己的范围,它可以看到@rc,但不能看到@TableName。