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
}
2 回答
我建议在应用程序逻辑而不是SQL中执行此操作,尤其是因为您似乎在谈论多个表 .
使用
SqlDataReader
,遍历结果并根据需要剪切字符串:为了避免持续反射(
is string
),您还可以使用阅读器的架构信息来确定哪些是字符串列 .如果我理解正确,您希望用户指定一个表名,并返回SELECT * FROM的结果,所有文本字段限制为100个字符,以及数据库端的所有文本字段?
在我看来,你需要创建一个存储过程来做到这一点 . 您的输入参数将是表名,然后您将继续查询表的结构,并构建一个动态SELECT语句,该语句在大于100个字符的文本字段上使用SQL子字符串 . 在存储过程中运行动态SQL语句,这将是您的结果 .
要获取表结构,只需使用表名作为参数运行存储过程sp_help . 结果将包含列名称和类型 . 循环遍历它以构建动态SQL语句 .