Sql server 2008 无法从web服务调用的存储过程中插入记录

Sql server 2008 无法从web服务调用的存储过程中插入记录,sql-server-2008,stored-procedures,Sql Server 2008,Stored Procedures,我有下表: CREATE TABLE [dbo].[omgbbq]( [tbl_key] [int] IDENTITY(1,1) NOT NULL, [name] [varchar](10) NOT NULL, [id] [int] NULL, CONSTRAINT [PK_omgbbq] PRIMARY KEY CLUSTERED ( [tbl_key] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE

我有下表:

CREATE TABLE [dbo].[omgbbq](
    [tbl_key] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](10) NOT NULL,
    [id] [int] NULL,
 CONSTRAINT [PK_omgbbq] PRIMARY KEY CLUSTERED 
(
    [tbl_key] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,
    ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
…和以下存储过程:

CREATE PROCEDURE sp_omgwth 
    @name VARCHAR(10), 
    @id INT
AS
BEGIN
    INSERT INTO omgbbq (name, id) VALUES (@name, @id);
    SELECT MAX(tbl_key) AS Max_tbl_key FROM omgbbq;
END
我通过从SSMS调用过程添加了一条记录:

EXEC sp_omgwth 'Gareth', 2
得到

tbl_key,name,id
1,Gareth,2
到目前为止,一切顺利。一位同事试图从web服务调用它,并得到了回报 “最大tbl_键”2

正如所料。但是,该记录不会显示在表中。当我通过从SSMS调用SP添加新记录时,我们在表中看到以下内容:

tbl_key,name,id
1,Gareth,2
3,Gawain,4
这就像它添加了记录,增加了标识值,但是…我不知道,回滚了它或者其他什么


有什么想法吗?我们都是以同一个用户的身份连接到服务器的,所以这似乎不是一个凭据权限问题。我们从另一个表和另一个SP获得相同的行为,这就是为什么我们创建这两个作为测试。

也许您需要提供一个来自webservice代码的SQL客户端调用示例。您可以尝试设置并检查执行返回状态。

了解数据库中发生的情况的最佳方法是运行跟踪。运行SQL Server Profiler并调用存储过程的web服务。然后看看这些事件,看看发生了什么


这是一个神秘的问题,但查看跟踪将告诉您什么和为什么。

您永远不应该使用SELECT MAXtbl\u键。。。要获取标识列的值,请使用选择范围\标识。。。相反更安全-不会在并发情况下中断!我可能应该澄清,开发人员尽可能地追踪问题。他们发现,当复制并粘贴到SSM中时,正在传递的SQL语句工作得非常好。此外,使用相同的代码库通过INSERT语句添加记录也起到了作用。Web服务调用任何带有INSERT的存储过程似乎有点奇怪。同意marc上面的评论。您不应该使用MAX。请发布您的web服务代码。在一个永远不会被提交的事务中,这听起来是可行的。客户端调用并没有什么特别奇妙的,我没有访问它的权限,但如果真的需要的话,我可以得到它。我认为重要的一点是,调用任何没有INSERT的存储过程都可以很好地工作。另外,您能否通过设置和检查EXECUTE return状态来澄清您的意思?想法不错。跟踪显示它实际上在一个回滚的事务中:使用[tha_db]go BEGIN TRAN go exec sp_omgwtf'matt','2'go ROLLBACK TRAN go BEGIN TRAN got开发人员将查看明天他们的代码可能在哪里完成了这项工作。感谢所有的想法和建议@mdoyle没问题,很乐意帮忙: