2010-01-14 59 views
0

我有一个关于如何检索SQL Server 2005中的列的自动增量或标识值的问题,当所述列不是第一个在表中声明列。当列不是表中的第一个时,检索AutoIncrement键值

我可以通过发出下面的代码得到一个表的生成值:

MyTable newRecord = new MyTable(); 
newRecord.SomeColumn = 2; 
newRecord.Save(); 
return newRecord.MyIdColumn; 

其中一期工程的其他列多少弥补特定表的主键精细regardles,但第一列声明必须是标识列,否则这是行不通的。

我的问题是,我必须将我的代码与其他我无法访问的表集成在一起,并且它们具有的标识列不是这些表中的第一列,所以我想知道是否有适当的解决方法我的问题,或者如果我坚持使用SELECT @@ IDENTITY行手动获取该值?

非常感谢您的帮助!

+1

亚音速不设置由序位的关键 - 如果你正在使用2.2然后保存后SetPrimarykey方法熄灭,并要求其支撑设置模式。所以 - 问题是,“不起作用”是什么意思?你有错误吗? – 2010-01-14 23:54:15

+1

不,完全没有错误。 “不起作用”意味着如果我有一个带有两个int列,col1和col2的表,并且只有col2是identity,那么当我执行.Save()并检查col2的值时,它将返回0刚刚生成的关键值。如果我将col2作为第一列而不是col1,并执行与以前相同的代码,则会正确返回生成的键值。我已经尝试了很多次,它总是给我一致的结果;我必须将我的身份列作为第一列,否则我无法访问我最近插入的记录的键值。 – Fervelas 2010-01-15 03:34:53

回答

0

从“EWWW总”部门:

这里是我的解决办法,现在,希望有人可以提出更好的解决方案,以我做了什么。

MyTable newRecord = new MyTable(); 
newRecord.SomeColumn = 2; 
newRecord.Save(); 
CodingHorror horror = new CodingHorror(); 
string SQL = "SELECT IDENT_CURRENT(@tableName)"; 
int newId = horror.ExecuteScalar<int>(SQL, "MyTable"); 
newRecord.MyIdColumn = newId; 
newRecord.MarkClean(); 
return newRecord.MyIdColumn; 
相关问题