1

我正在用 C# 和 Java 构建一个查询构建器模块,用户可以在其中根据指定的连接表达式连接表,例如[Table1].[ID] = [Table2].[ID].

Table1用户可以修改连接表达式,并且可以选择将任何字段与 中的任何字段等同起来Table2

我想检查列数据类型和长度是否相同,但是例如varchar(10)可以将列与nchar(10)列连接。只要长度相同,就可以选择这些不同的数据类型。

因此,我应该在我的检查中指定什么条件来查看用户选择的连接表达式是否有效?我不能单独依赖 PK/FK 约束。

这些标准可以应用于 C# 或 Java - 没关系,因为一旦我有了一个通用的答案,我就可以将我的解决方案转换为适合两者。

4

2 回答 2

2

Books Online 将为您提供数据类型,哪些可以隐式转换,哪些必须显式转换,哪些不能转换。搜索 CAST and CONVERT (Transact-SQL) 并向下滚动。

既然您知道规则,您应该能够构建某种规则引擎。

于 2013-03-11T18:13:52.447 回答
1

我认为你最好的选择是简单地硬编码集合,然后检查两个字段是否在同一个集合中,然后才比较长度。

var TypeSets = new Dictionary<string, List<string>> {
                   { "string", new[] { "varchar", "nchar", "text" } },
                   { "integer", new[] { "int", "smallint" } },
               };

然后:

if (TypeSets.Any(x => x.Value.Contains(fieldType1) && x.Value.Contains(fieldType2)))
{
   // Check length of each field
}
else 
{
    return false;
}
于 2013-03-11T17:53:47.753 回答