我正在使用SQL Server 2008并开发一个处于维护阶段的项目。
我想在主键是Integer但不是标识的表中插入记录。例如表名为tblFiles
,字段为ID, FileName, FileContent
。
实际上该表正在使用中,因此我不想在其中进行任何架构更改。我希望在插入行之后输入密钥,因为我必须将其放在另一个表中。 Id列中的现有值是不同的整数,表示不按顺序排列。
所以我想要的查询也返回Id值。所以我想只插入FileName
和FileContent
以及我可以嵌入到我的插入查询中的某种sql,它插入一个唯一的Id并向我发送该ID
答案 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.
谢谢