C# 字段相等需要什么标准?
我正在用C#和Java构建一个查询生成器模块,用户可以根据指定的连接表达式连接表,例如C# 字段相等需要什么标准?,c#,java,sql,sql-server,database,C#,Java,Sql,Sql Server,Database,我正在用C#和Java构建一个查询生成器模块,用户可以根据指定的连接表达式连接表,例如[Table1].[ID]=[Table2].[ID] 用户可以修改联接表达式,并可以选择将Table1中的任何字段与Table2中的任何字段相等 我想检查列的数据类型和长度是否相同,但是varchar(10)列可以与nchar(10)列连接。只要长度相同,就可以选择这些不同的数据类型 因此,我应该在检查中指定哪些条件以确保用户选择的联接表达式有效?我不能单靠PK/FK约束 标准可以应用于C#或Java-这无关
[Table1].[ID]=[Table2].[ID]
用户可以修改联接表达式,并可以选择将Table1
中的任何字段与Table2
中的任何字段相等
我想检查列的数据类型和长度是否相同,但是varchar(10)
列可以与nchar(10)
列连接。只要长度相同,就可以选择这些不同的数据类型
因此,我应该在检查中指定哪些条件以确保用户选择的联接表达式有效?我不能单靠PK/FK约束
标准可以应用于C#或Java-这无关紧要,因为一旦我有了一个一般性的答案,我就可以将我的解决方案转换为两者都适用。我认为最好的办法是只使用硬编码集,然后检查两个字段是否在同一集中,然后比较长度
var TypeSets = new Dictionary<string, List<string>> {
{ "string", new[] { "varchar", "nchar", "text" } },
{ "integer", new[] { "int", "smallint" } },
};
联机丛书将为您提供可以隐式转换、必须显式转换和无法转换的数据类型。搜索强制转换和转换(Transact-SQL)并向下滚动
既然您已经了解了规则,那么您应该能够构建某种规则引擎 您如何访问数据库?你能从你的代码中分辨出字段本身是什么类型吗?@Bobson-是的,很容易做到这一点。存在许多库,以及对sys.INFORMATION_SCHEMA执行的SQL语句。这不是我要问的。您可以使用
size(columnName)
检查列的大小。如果两个表的列返回相同的大小,则允许联接..否则将闪烁一条错误消息。@VishalK-但这是一种情况。例如,如果一个是varchar
,另一个是nchar
,则也可以联接字段。我如何检查这个场景?由于只允许加入相等的数据类型,因此在这种情况下不起作用,否?我可以检查列的类型是,但如果一个是nchar
,另一个是varchar
,该怎么办?这些不是相等的吗?谢谢你的建议。那么,硬编码是一种方式吗?我唯一的问题是数据类型的数量不真实,因此编译这样的列表需要相当长的时间。@DotNET-我不知道这是最好的方法,但可能是最安全的方法。另一种选择是根据什么是可兑换的来尝试和猜测,这可能会导致以后的问题。谢谢你的建议+1.
if (TypeSets.Any(x => x.Value.Contains(fieldType1) && x.Value.Contains(fieldType2)))
{
// Check length of each field
}
else
{
return false;
}