【发布时间】:2017-12-18 17:12:28
【问题描述】:
我在 C# 中有这段代码,但我需要它来选择除表的第一列(标识列)之外的所有列,以便当我将数据插入到不同数据库中的相同表中时,目标数据库分配自己的标识列值:
SqlCommand commandSourceData = new SqlCommand($"SELECT * FROM dbo.{tableName};", sourceConnection);
SqlDataReader reader = commandSourceData.ExecuteReader();
有没有办法做到这一点?
【问题讨论】:
-
是的,在查询中,您可以指定所需列的名称,而不是使用
*通配符,例如select col1,col2,col3... -
它需要是动态的,以便我可以将任何表名传递给它,它会为该表执行此操作
-
当您的身份列不是第一个时会发生什么?你真的应该明确地管理数据。但是,如果您对像这样的通用 catch all insert 死机,您将不得不使用动态 sql 并仅选择那些不是标识且不是计算列的列。
-
这真的非常危险,因为您的身份列不仅不能像肖恩所说的那样是“第一”,而且您可以拥有没有身份列、加密列的表,并且您可以拥有其他列旨在直接填充(审计列、newsequentialid、临时表、rowversion、计算列等)。
-
您能解释一下为什么需要更改这些标识值吗?您可能会破坏这些表之间存在的所有关系。
标签: c# sql-server sqlbulkcopy