首页 文章

子字符串自动应用于查询中的文本类型列

提问于
浏览
0

我有以下查询

select * from table1

如果table1包含文本类型列/列,那么我只需要100个字符

假设,最终用户不知道表的模式(列名),只知道表名从前端应用程序的查询分析器执行此查询 . 用户编写器在textarea中查询并执行

*我正在使用SqlServer2005
不要在frond end的查询中使用substring函数
我可以在C#代码中的文本列上使用子字符串函数,但我想在数据库端使用它 . *

2 回答

  • 1

    我建议在应用程序逻辑而不是SQL中执行此操作,尤其是因为您似乎在谈论多个表 .

    使用 SqlDataReader ,遍历结果并根据需要剪切字符串:

    while(reader.Read())
    {
      var rawValues = reader.GetValues();
      var values = new object[rawValues.Length];
    
      for (i=0; i < rawValues.Length; i++)
      {
        var value = rawValues[i];
        if(value != null && value is string && value.Length > 100]
          values[i] = value.SubString(0, 100);
      }
    
      //now do whatever you want with the values
    }
    

    为了避免持续反射( is string ),您还可以使用阅读器的架构信息来确定哪些是字符串列 .

  • 0

    如果我理解正确,您希望用户指定一个表名,并返回SELECT * FROM的结果,所有文本字段限制为100个字符,以及数据库端的所有文本字段?

    在我看来,你需要创建一个存储过程来做到这一点 . 您的输入参数将是表名,然后您将继续查询表的结构,并构建一个动态SELECT语句,该语句在大于100个字符的文本字段上使用SQL子字符串 . 在存储过程中运行动态SQL语句,这将是您的结果 .

    要获取表结构,只需使用表名作为参数运行存储过程sp_help . 结果将包含列名称和类型 . 循环遍历它以构建动态SQL语句 .

相关问题