在INSERT上将SQL标识返回给VB变量

Lyn*_*hie 7 sql ado asp-classic

嗨我下面有一些代码,我希望在执行SQL语句时返回结果标识号.

set objCnn = Server.CreateObject("ADODB.connection")

CurrMachine = "my-test-box"

ObjCnn.Open("Provider=SQLOLEDB;Persist Security Info=False;User ID=Test;password=Test123;Language=British;Initial Catalog=TestDB;Data Source=" & CurrMachine)

strSQL = "INSERT INTO dbo.xyz" & _ " (field) " & _ " VALUES  (" & date & ")" & _ " SELECT @@Identity "

objCnn.Execute strSQL
Run Code Online (Sandbox Code Playgroud)

我添加了SELECT @@ Identity,当我在SQL中执行此操作时将返回唯一的ID号.如果我响应.write strSQL我得到SQL字符串而不是结果文本.

干杯!

编辑

理查德

    set objCnn = Server.CreateObject("ADODB.connection")

    CurrMachine = "my-test-srv"

    ObjCnn.Open("Provider=SQLOLEDB;Persist Security Info=False;User ID=Test;password=Test123;Language=British;Initial Catalog=Test;Data Source=" & CurrMachine)

        strSQL = "INSERT INTO xyz" & _
                " ([date])" & _
                 " VALUES  ( " & date & " )" & _
                 " SET NOCOUNT OFF; SELECT SCOPE_IDENTITY() ID; "

    Set rs = objCnn.Execute(strSQL)
    response.write rs("ID")
Run Code Online (Sandbox Code Playgroud)

Ric*_*iwi 6

ADODB.Connection.Execute运行的SQL语句,但并没有修改字符串,所以当然,当你检查(或response.write)STRSQL,这是不变的-仍然包含SQL命令文本.

您可以将SELECT语句中创建的记录集捕获到ADODB.recordset中.

strSQL = "SET NOCOUNT ON; INSERT INTO dbo.xyz" & _
                 " (field) " & _
                 " VALUES  (" & date & ");" & _
                 " SET NOCOUNT OFF; SELECT SCOPE_IDENTITY() ID; "
Dim rs
Set rs = objCnn.Execute(strSQL)
response.write rs("ID")
Run Code Online (Sandbox Code Playgroud)

请注意,您应该使用SCOPE_IDENTITY()而不是@@IDENTITY极少数例外(如果存在的话).