Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在不使用存储过程的情况下一次访问数据库时插入然后选择_Sql Server_Asp Classic - Fatal编程技术网

Sql server 如何在不使用存储过程的情况下一次访问数据库时插入然后选择

Sql server 如何在不使用存储过程的情况下一次访问数据库时插入然后选择,sql-server,asp-classic,Sql Server,Asp Classic,我希望能够在表中插入一行,然后选择新创建的标识并将其返回到经典的asp JScript,而无需创建存储过程。能做到吗 基本上是这样的: ... rs = Server.CreateObject("ADODB.RecordSet"); rs.Open("INSERT INTO ...;SELECT SCOPE_IDENTITY() x;", objConn, ... Response.Write(rs("x").Value); 以下操作可行,但相当于两次访问数据库: ... objConn.Ex

我希望能够在表中插入一行,然后选择新创建的标识并将其返回到经典的asp JScript,而无需创建存储过程。能做到吗

基本上是这样的:

...
rs = Server.CreateObject("ADODB.RecordSet");
rs.Open("INSERT INTO ...;SELECT SCOPE_IDENTITY() x;", objConn, ...
Response.Write(rs("x").Value);
以下操作可行,但相当于两次访问数据库:

...
objConn.Execute("INSERT INTO ...
rs = Server.CreateObject("ADODB.RecordSet");
rs.Open("SELECT SCOPE_IDENTITY() x;", objConn, ...
Response.Write(rs("x").Value);

您可以尝试直接调用存储过程,并将结果存储在如下数组中:

dim rs、arr、sql sql=execmyproc set rs=Server.CreateObjectADODB.Recordset rs_temp.open sql,应用程序连接卸载,3,3,1 如果不是rs.bof和rs.eof,则runsql=rs.getrows 克洛斯 设置rs=无 在存储过程中,您可以执行任何您想要的操作

CREATE PROCEDURE myProc
AS
BEGIN
    UPDATE 
        myTable
    SET 
        myField = 42

    SELECT 
        myField 
    FROM 
        myTable 
    WHERE 
        someCondition = 1
END
-编辑-


获取ASP函数的更完整版本。请注意,您必须将其包含在一个单独的文件中,顶部有一个VB脚本说明符,而不是JScript,这样它才能正常工作。

我认为您首先收到的是受插入影响的行数,然后是标识值。在访问记录集之前,可以使用SET NOCOUNT ON或rs.MoveNext。 e、 g


你试过了吗?是的,记录集是无效的,它不喜欢它,应该可以用。如果记录集无效,这里可能会有其他配置问题。如果我不在记录集中包含insert,而是使用objConn.execute,它可以正常工作,但这需要两次访问数据库,因此播放中没有其他配置问题。这可能会有所帮助。无论如何,从sql注入的角度来看,它更安全:
   rs = Server.CreateObject("ADODB.RecordSet");
    rs.Open("SET NOCOUNT ON;INSERT INTO ...;SELECT SCOPE_IDENTITY() x;", objConn, ...
    Response.Write(rs("x").Value);
rs = Server.CreateObject("ADODB.RecordSet");
rs.Open("INSERT INTO ...;SELECT SCOPE_IDENTITY() x;", objConn, ...
rs.MoveNext()
Response.Write(rs("x").Value);