2015-06-30 64 views
3

所以,我试图创建我的数据库“test”里面的一张桌子,MS SQL 2005自动递增错误

CREATE TABLE TestTbl(
id INT IDENTITY(1,1), 
Agent_id VARCHAR(255) NOT NULL 
) 

创建它后,我试图添加2个值通过PHP代理,但结果是这样的:

id | Agent_id 
0  8080 
0  8081 

它不会自动递增,即使我设置“身份证”作为主键,问题仍然存在,任何人都知道如何解决这个问题?

这里是在PHP我的INSERT语句,没关系的$conn,因为它的工作原理,它是我的SQL连接

if(isset($_POST['agentid'])){ 
    $agent = $_POST['agentid']; 
    $query = "SELECT * FROM [Test].[dbo].[TestTbl] WHERE [Agent_id] = '$agent'"; 
    $result = sqlsrv_query($conn,$query); 
     if(sqlsrv_has_rows($result) !=0){ 
    echo "ID EXISTS"; 
     }else{ 
    $sql = "SET INDENTITY_INSERT TestTbl ON 
    INSERT INTO [Test].[dbo].[TestTbl] 
    ([id],[Agent_id]) VALUES ('','$agent') 
    SET IDENTITY_INSERT TestTbl OFF"; 
    echo "Added"; 
    }} 
+0

什么是完整的insert语句? –

+0

等一下,我会编辑我的帖子并添加插入语句。 :) –

+0

我跑你的创建表脚本,进入编辑,并添加2记录,这两个记录自动递增。 (SQL 2014)但这应该在2005年没有什么不同......奇怪。 – Kris

回答

1

更改这一部分

INSERT INTO [Test].[dbo].[TestTbl] 
    ([id],[Agent_id]) VALUES ('','$agent') 

INSERT INTO [Test].[dbo].[TestTbl] 
    ([Agent_id]) VALUES ('$agent') 

当它是自动递增时,您不需要在INSERT声明中指定。当你想用你的表的自动递增功能

SET IDENTITY_INSERT允许明确的值插入表的标识列

也不要SET IDENTITY_INSERTOFF

你的完整的查询

if(isset($_POST['agentid'])){ 
    $agent = $_POST['agentid']; 
    $query = "SELECT * FROM [Test].[dbo].[TestTbl] WHERE [Agent_id] = '$agent'"; 
    $result = sqlsrv_query($conn,$query); 
     if(sqlsrv_has_rows($result) !=0){ 
    echo "ID EXISTS"; 
     }else{ 
    $sql = "INSERT INTO [Test].[dbo].[TestTbl] 
    ([Agent_id]) VALUES ('$agent')"; 
    echo "Added"; 
}} 
+0

嗨,我已经试了一下,并得到一个错误说。 VALUES子句中的值数量必须与插入语句中指定的列数相匹配。我是否需要将ID作为主键? –

+0

不需要。确保这部分'([Agent_id])VALUES('$ agent')'。两者都应该只有1个值,因为Id是标识和自动插入。 – sqluser

+0

是的,你可能已经离开了([id],[Agent_id])而不仅仅是([Agent_id]) –