【问题标题】:Get a list of columns and widths for a specific record获取特定记录的列和宽度列表
【发布时间】:2014-03-14 17:18:02
【问题描述】:

我想要一个关于给定表的属性列表以及该表中特定数据记录的属性列表 - 在一个结果中 像这样的:

列名、数据长度、SchemaLengthMax

...并且仅针对一条记录(基于 where 过滤器)

所以我的想法是这样的: - 从 sys.columns 中获取列列表以及基于模式的 maxlength 值 - 将列名填充到包含(column_name、data_length、schema_size_max)的临时表中 - 现在遍历该临时表和每个列名,根据特定记录获取该列的数据,然后使用该数据的长度更新临时表 - 最后,从临时表中选择

听起来合理吗?

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    是的。这样就行了。不确定它是否是最好的,因为它涉及每列一次迭代以及源表上的 where 条件。

    请考虑一下:

    1. 应用 where 条件后将候选记录放入临时表中。确保获得主键。如果没有主键,则获取 rowid。 (假设 SQL Server 2005 或更高版本)。

    2. 创建一个包含三列的临时表(比如#RecValueLens):Primary_key_Value、MyColumnName、MyValueLen

    3. 遍历列名列表(仅将列名放入另一个临时表后)并构建步骤 4 所示的 sql 语句。

    4. 插入 #RecValueLens(Primary_Key_Value、MyColumnName、MyValueLen) 从 Source_Table_Goes_Here 中选择 Max(Primary_Key_Goes_Here),Max('Column_Name_Goes_Here') 作为 ColumnName,Len(Max(Column_Name)) 作为 ValueMyLen 按 Primary_Key_Goes_Here 分组

    5. 因此,如果有 10 列,您将有 10 个插入语句。您可以将它们插入临时表并将其作为循环运行。如果列数很少,您可以将所有语句连接成一个批处理。

    6. 从上面运行 SQL 语句。所以,你有记录方式、列方式、值长度。剩下的是获取列定义。

    7. 将列定义从 sys.columns 获取到临时表中,并与 #RecValueLens 连接以获取输出。

    你要我给你写吗?

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多