我正在使用C#和Java构建一个查询构建器模块,用户可以根据指定的连接表达式连接表,例如[Table1].[ID] = [Table2].[ID]
。
用户可以修改联接表达式,并可以选择将Table1
中的任何字段与Table2
中的任何字段等同。
我想过检查列数据类型和长度是否相同,但是varchar(10)
列可以与nchar(10)
列连接。只要长度相同,就可以选择这些不同的数据类型。
因此,我应该在检查中指定哪些条件才能看到用户选择的连接表达式是否有效?我不能单靠PK / FK限制。
标准可以应用于C#或Java - 无关紧要,因为一旦得到一般答案,我就可以将我的解决方案转换为适合两者。
答案 0 :(得分:2)
联机丛书将为您提供数据类型,并且可以进行非转换,必须明确转换并且无法转换。搜索CAST和CONVERT(Transact-SQL)并向下滚动。
您应该能够在制定规则时构建某种规则引擎。
答案 1 :(得分: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;
}