2011-09-11 31 views
0

我工作在C#项目,并正在执行这一说法,但没有得到带回点什么(用数据表来找回数据)SQL服务器 - 复合语句

string SQL = 
    "DECLARE @NewID int; SELECT TOP 1 @NewID = [ItemID] + 1 FROM [GroupItems] ORDER BY [ItemID] DESC; " + 
    "INSERT INTO [GroupItems] ([InstanceID], [ItemID], [GroupID], [ItemName], [DisplayName], [Units], [Updated]) " + 
    "VALUES(@instanceID, @NewID, @groupID, @name, @display, @units, CURRENT_TIMESTAMP); SELECT * FROM [GroupItems] WHERE [ItemID][email protected]"; 

基本上我想做的是返回我刚刚创建的行。任何帮助?

+0

此查询在SQL Management Studio Express中正常工作吗? – Sudantha

+1

也许添加执行查询的代码? – Andomar

+0

你可以发布组项目表的结构吗?如果您将最后一行更改为SELECT 1,您是否返回1 ... – Sparky

回答

2
  • 由于@variables为NULL,您可能会丢失信息。你如何设置它们?
  • 以某种方式抑制错误。
  • 你把数据存储在表中,还是只是没有结果?

无论如何,有更简单的方法来做到这一条线

首先,使ITEMID列的身份。否则这个代码失败,因为它是不安全的重叠调用

然后第二,更改代码使用OUTPUT子句。您可以一次完成此操作

INSERT INTO [GroupItems] ([InstanceID], [GroupID], [ItemName], [DisplayName], [Units], [Updated]) 
OUTOUT INSERTED.* 
VALUES(@instanceID, @groupID, @name, @display, @units, CURRENT_TIMESTAMP);