问题标签 [database-metadata]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 在 SQL Server 中查找包含两个特定列的表
我想在 SQL Server 中找到包含两个特定单独列的所有表。
第一列名称是“LIKE '%A%'”(意味着它包含子字符串“A”),第二列名称是“LIKE '%B%'”(意味着它包含子字符串“B”)。
我写了以下查询,我想检查它的正确性:
c# - 实体框架实体不在 DataSpace.OSpace (_workspace.GetItemCollection(DataSpace.OSpace)) 但在 DataSpace.CSpace
我一直在用XML
s 来表示实体框架。我试图创建一种可以在运行时注入属性的实体,首先我创建DynamicEntity
了动态对象
然后实体继承自此
public partial class QUOTE_HOUSE : DynamicEntity
(当我从数据库获取数据后手动设置属性时,它似乎确实有效)。
因此,基于这种删除属性的机制,我尝试做另一个将属性插入 XML 的机制,并且整个事情似乎都还不错(至少它不会像 XML 不正确时通常那样做映射var mappingCollection = new StorageMappingItemCollection(conceptualCollection, storageCollection, new[] {mappingXml.CreateReader()});
)。
执行查询时出现问题是 EF
实体类型 QUOTE_HOUSE 不是当前上下文模型的一部分。
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidOperationException:实体类型 QUOTE_HOUSE 不是当前上下文模型的一部分。
[InvalidOperationException:实体类型 QUOTE_HOUSE 不是当前上下文模型的一部分。]
System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType(Type entityType) +208
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType ) +50
TryUpdateEntitySetMappingsForType
我在System.Data.Entity.Internal.InternalContext
加载 pdb 后追踪到EF
基本上我发生的事情QUOTE_HOUSE
不在试图从this._workspace.GetItemCollection(DataSpace.OSpace)
哪里映射它。UpdateEntitySetMappings
它检查它是否存在this._entitySetMappingsCache.ContainsKey(entityType))
,因为它不是它然后尝试更新映射迭代this._workspace.GetItemCollection(DataSpace.OSpace)
我的项目不存在的位置
但是我可以看到我的实体确实存在于this._workspace.GetItems<EntityContainer>(DataSpace.CSpace)
.
完整UpdateEntitySetMappings
外观如下:
实体如何进入 this._workspace.GetItemCollection(DataSpace.OSpace)?为什么实体会在CSpace
而不是在OSpace
?
编辑: 对于那些可能想要破解赏金的人,以下是您可能需要设置环境以重现问题的组件。
首先从 db 生成的实体,(DynamicEntity
代码在上面)
数据库的 DbContext 需要构造函数重载
进行列注入的机制(它是一个粗略的原型,所以请原谅它看起来有多糟糕),当注入尝试字符串列时,我知道它映射正常。
初始化:
您应该能够从实体生成 oracle 数据库QUOTE_HOUSE
并输入一些虚拟值,不要认为您需要视图,因为它会爆炸.ToList()
。生成数据库后,将附加列添加到数据库而不是模型(alter table QUOTE_HOUSE
add TESTCOL Varchar2(20)
) - 使数据库中的列在运行时注入模型中。您可能还需要在此处调试 EF 程序集,这是如何进行的。如果您需要更多信息或我遗漏了什么,请告诉我。
java - DatabaseMetaData.ownDeletesAreVisible vs DatabaseMetaData.deletesAreDetected 争议
我将 JDBC 与 mysql-connector-java-6.0.2.jar 一起使用,除非我做错了什么,否则我认为 DatabaseMetaData.ownDeletesAreVisible 和 DatabaseMetaData.deletesAreDetected 实现在彼此之间以某种方式不一致。
以下是 JDBC 规范关于 ownDeletesAreVisible 的说明:
" ...如果删除的行被删除或替换为空行,则DatabaseMetaData.ownDeletesAreVisible(int type)方法将返回true。如果ResultSet对象仍然包含已删除的行,则返回false,这意味着删除不作为对给定类型的 ResultSet 对象的更改可见... "
关于 deletesAreDetected:
“ ...如果从 ResultSet 对象中删除的行被删除,则方法 deletesAreDetected 返回 false,如果删除的行被空行或无效行替换,则返回 true... ”
我将输出添加为注释:
metadata - 视图的完整列元数据?
如果您从 中查询表dbc.columns
,您将获得每一列的完整元数据,尤其是数据类型、长度、可空/不可空等。查询视图时,您只会获得数据库、表和列名。所有其他字段为空。
如果我有一个除了 之外什么都不做的select * from table
视图,那么当它被编译为数据库对象时,基础表的元数据似乎会传播到视图。这即使对于计算列也是有意义的,因为我的实验表明 Teradata 分析所有可能的逻辑路径以确定计算列的类型。这是一个例子:
在那个 case 语句中,只有第一个条件会返回 true,所以结果总是'a'
. 但是,当您查看表 DDL 时,您可以看到它计算的列VARCHAR(4)
证明它分析了所有情况:
因此,假设此视图元数据存在于某处似乎是合理的,即使通过 DBC 查询该视图会导致除上述列之外的所有列都为空。
java - DatabaseMetaData 程序未获取表名
我创建了一个程序来使用 rt 从用户 rt 获取所有表名DatabaseMetaData
,尽管该程序已成功编译并且运行它并没有获取表名。它运行并显示表列表:然后没有名称。程序退出。
这里的任何人都可以帮助我在我的程序中找到错误的逻辑。
ssis - 从 SSIS 中的 OLE DB 源获取第二个数据集
我需要从 DB1 读取数据并将它们写入另一个 DB2。我使用带有 CTE 和临时表的复杂查询,不,我不能将此查询放在 SProc 中。我使用 OLE DB 源和 OLE DB 目标。
当我将查询作为 SQL 命令放在 OLEDBSource 中时,我通常会抱怨由于 CTE 正在使用临时表而无法确定元数据。
我不能使用“带有结果集”的解决方法,因为它不是 SProc。所以我尝试了另一种解决方法,“SET FMTONLY ON/OFF”。
现在 OLE DB 源接受我的查询,但它输出两个数据集,第一个是空的,第二个是我需要的数据。OLE DB 目标不写入单行,因为它只读取第一个结果集,即空结果集。
我该如何解决这个问题?
我无法更改其他临时表,基本上我无法更改查询。如果可能,我正在寻找 SSIS 解决方案,而不是 SQL 解决方案。谢谢。
java - DatabaseMetaData.getColumns 返回相似命名表的列
在我的数据库中,我有两个表的不同列的“EMPLOYEE_DETAILS”和“EMPLOYEE DETAILS”表。当我使用 DatabaseMetaData (java.sql.DatabaseMetaData) 的 getColumns() 方法获取表“EMPLOYEE_DETAILS”的列详细信息时,我得到了“EMPLOYEE_DETAILS”和“EMPLOYEE DETAILS”的列。
我已经为数据库 Oracle、MySql 和 MSSQL 尝试过这个。结果是一样的。
我用来调用 getColumns 方法的代码如下:
谁能帮我解决这个问题。
java - ojdbc:tomcat/weblogic:如何重置连接元数据的 cusror
试图从连接/数据库元数据中获取列的元数据。有什么方法可以使用rs.beforeFirst()
或任何替代方法来向后移动光标?
以下是代码片段:
参考:
在 Tomcat 7/8 和 WebLogic 11/12 上使用 JNDI 数据源打开/配置连接。
java - DatabaseMetaData.getColumns() 中缺少列
DatabaseMetaData.getColumns()的 Java 7 Javadoc说它返回一个包含 24 列的ResultSet,第一个名为TABLE_CAT,最后一个名为IS_GENERATEDCOLUMN。但是,我从 Oracle 收到的结果集只有 18 列。我用以下代码验证了它:
上面的代码产生这个输出:
为什么我没有得到所有 24 列?我错过了什么?
sql - 从类似于 EAV 的元数据驱动模式查询数据
我们有一个类似于 EAV 的数据模型。但是,我们的属性集有限。在我们的数据模型中,我们存储个人完成的不同活动,并且根据活动类型,属性会有所不同。
我们想要获取个人的活动和相应的属性/值。我已经描述了Activity
、ActivityDetails
表和预期的结果集。
您能否指导我如何从数据模型中得出预期的结果集?我们必须做某种旋转。但是,不确定是否会达到相同的程度。
在下面的示例数据中,ClickURL是一个 Activity。它具有三个属性:URLAddress、ClickCount、ClickDate。三个属性对应的值为:www.companyurl.com , 10 , 20140101
结果集应如下所示:
带数据的示例查询