2009-12-04 51 views
1
BGREX.BGREXDataTable _bRexDataTable = new BGREX.BGREXDataTable(); 
BGREX.BGREXRow bgRexRow = _bRexDataTable.NewBGREXRow(); 

bgRexRow.BGRes_TITLE = "abc"; 
bgRexRow.BGRes_VERSION = 123; 

_bRexDataTable.AddBGREXRow(bgRexRow); 
int rewEffected = Adapter.Update(_bRexDataTable); 

在数据库中使用上述插入记录,工作完美。现在我需要它自动生成新插入的记录的ID(主键),而不是影响从获取新插入记录的ID,使用SqlDataAdapter

Adapter.Update(_bRexDataTable); 

它看起来像我需要SCOPE_IDENTITY()函数返回的行,但我不知道在哪里将其包含在设计器中,因为设计者不满意添加到实际插入查询中的以下语法。 它炒锅在SQLSERVER管理控制台罚款虽然

DECLARE @ROWI_D int 

INSERT INTO TABLE 
..... 
..... 
.....   
VALUES 
("val1","val2",.......................) 

SET ROW_ID = SCOPE_IDENTITY() 
+0

是直接使用存储过程或sql语句的适配器插入命令吗? – user10635 2009-12-04 21:48:55

+0

SQL语句直接,不存储过程 – 2009-12-04 21:49:53

回答

2

我不确定如何使用sql语句执行此操作。我并不是说它不能完成,我只是从来没有用过这些陈述,总是通过sprocs。

通过使用存储过程,您可以定义一个输出参数,您可以在sproc中设置等于SCOPE_IDENTITY(),然后确保将该参数传递给命令,同时将其设置为输出方向。

对不起,我不具有直接的SQL调用一个解决方案,但也许别人以这种方式工作更多的经验,将插入内容。

这里有一个link一个线程,其中讨论同一议题和可能的答案。但是没有验证建议的解决方案是否有效。

+0

感谢队友,存储过程工作,稍后会调查 – 2009-12-05 00:26:35

0

如何@@身份?

+0

我得到的是“Declare SQL构造或语句不被支持”,在查询设计器 – 2009-12-04 22:08:05

+0

** IF **你想使用类似的东西,请务必使用** SCOPE_IDENTITY()**!您可能会遇到意外和不想要的意外,否则...... – 2009-12-05 09:21:18

1

最好的方法是更改​​为一个存储过程,该参数返回所需的值。发布现在执行更新的代码,我(或其他人)会告诉您如何重构它以使用存储过程。这并不难。