查询SQL Server中的SQL插入?

时间:2009-12-15 16:56:22

标签: sql sql-server tsql sql-server-2008 insert

我正在使用SQL Server 2008并开发一个处于维护阶段的项目。

我想在主键是Integer但不是标识的表中插入记录。例如表名为tblFiles,字段为ID, FileName, FileContent

实际上该表正在使用中,因此我不想在其中进行任何架构更改。我希望在插入行之后输入密钥,因为我必须将其放在另一个表中。 Id列中的现有值是不同的整数,表示不按顺序排列。

所以我想要的查询也返回Id值。所以我想只插入FileNameFileContent以及我可以嵌入到我的插入查询中的某种sql,它插入一个唯一的Id并向我发送该ID

5 个答案:

答案 0 :(得分:4)

好吧,如果它不是IDENTITY字段 - 您是否必须在插入中指定“ID”才能成功?如果是这样 - 您已经拥有 ID!或者我错过了什么? ID是由触发器确定的吗?

如果是,请尝试以下查询:

INSERT INTO dbo.tblFiles(FileName, FileContent)
OUTPUT inserted.ID
VALUES ('yourfile.name', 'your contents')

这应该从INSERT查询中返回新插入的ID。

马克

答案 1 :(得分:1)

您可以使用

创建一个不太优雅的唯一整数

SELECT MAX(ID)+ 1 FROM tblFiles

然后根据具体情况从您的查询或sproc中返回。否则请按照marc_s所说,如果已经知道的话。

更新:不得不说,而不是根据要求提供这种软糖,我强烈建议你努力推回并改变表格,这是一个标识栏,因为这就是。到目前为止,所有答案都只是愚蠢,尤其是我的。

答案 2 :(得分:1)

更改列标识规范>身份是否。

插入表格后,您可以

Select SCOPE_IDENTITY() 

获取刚添加的整数并在SP中返回。

如果你真的无法编辑数据库模式,也许可以在数据库中添加另一个表,该表有两列名为ID和CurrentDate。使ID列成为标识。在您的代码中插入此表首先选择SCOPE_IDENTITY(),然后使用返回的整数作为ID插入到tblFles表中。

P.S。停止使用tbl为你的表添加前缀,即1999年。:)

答案 3 :(得分:1)

所以我的最终查询看起来像......

Insert into dbo.tblData (Id, FName, LName) 
output inserted.Id
values ((SELECT MAX(ID) + 1 FROM dbo.tblData), 'xyz', 'abc')

答案 4 :(得分:0)

我们可以将max(ID)+1分配给整数变量,然后我们可以插入

Declare @ID int
Select @ID = ISNULL(MAX(ID),0) + 1 FROM tblFiles

INSERT INTO tblFiles 
(
  ID, FileName, FileContent
)
Select @ID,'FileName','FileContent'

此插入是直接的,

INSERT INTO tblFiles 
(
  ID, FileName, FileContent
)
 Select (Select ISNULL(MAX(ID),0) + 1 FROM tblFiles),'FileName','FileContent'

这里我们必须使用ISNULL条件,因为表中没有数据然后它将返回Null。所以ISNULL(MAX(ID),0)+ 1这个条件会使Data为null然后0 + 1 = 1.

谢谢