Sql server 在经典ASP/VBScript中,如何使用set@local_variable获取变量集的值?

Sql server 在经典ASP/VBScript中,如何使用set@local_variable获取变量集的值?,sql-server,vbscript,asp-classic,Sql Server,Vbscript,Asp Classic,我有一个表,它有一个类型为的字段,该字段将由对的调用填充 我想做的是在我向表中插入一条记录后立即获取创建的GUID 如果我从SQLManagementStudio运行以下SQL,它会非常有用地打印出GUID的值 DECLARE @GUID uniqueidentifier;SET @GUID = NEWID();SELECT @GUID as guid; 我的问题是,如何使用VBScript从经典ASP获取@GUID的值 我试过这个 <% conn.open Application("C

我有一个表,它有一个类型为的字段,该字段将由对的调用填充

我想做的是在我向表中插入一条记录后立即获取创建的GUID

如果我从SQLManagementStudio运行以下SQL,它会非常有用地打印出GUID的值

DECLARE @GUID uniqueidentifier;SET @GUID = NEWID();SELECT @GUID as guid;
我的问题是,如何使用VBScript从经典ASP获取@GUID的值

我试过这个

<%
conn.open Application("ConnectionString")

sql = "DECLARE @GUID uniqueidentifier;SET @GUID = NEWID();SELECT @GUID as guid;"
set res = conn.execute(sql) 

response.write res.fields.count
response.write res("guid")
%>
但它似乎不起作用。res对象没有任何字段,因此尝试读取guid字段时出错


我得到的错误是在与请求的名称或序号对应的集合中找不到项。在我试图读取resguid中的值的那一行,看起来您简化了查询。显示的代码段按原样工作

但是,如果您正在运行存储过程或多语句查询,conn.execute可以返回多个记录集,您可以逐步使用这些记录集,直到找到最后一个记录集


状态消息也会干扰记录集,因此请确保在多语句批处理中使用SET NOCOUNT ON。

看起来您简化了查询。显示的代码段按原样工作

但是,如果您正在运行存储过程或多语句查询,conn.execute可以返回多个记录集,您可以逐步使用这些记录集,直到找到最后一个记录集


状态消息也会干扰记录集,因此请确保在多语句批处理中使用SET NOCOUNT ON。

可能我误读了,但如果您这样做会怎么样:

create proc dbo.myreturn 
as
declare @returnval nvarchar(255)

begin tran
DECLARE @GUID uniqueidentifier

SET @GUID = NEWID()
set @returnval=(select @GUID)

commit

select @returnval

更新:从ASP调用存储过程:

可能我误读了,但如果您这样做会怎么样:

create proc dbo.myreturn 
as
declare @returnval nvarchar(255)

begin tran
DECLARE @GUID uniqueidentifier

SET @GUID = NEWID()
set @returnval=(select @GUID)

commit

select @returnval

更新:从ASP调用存储的进程:

我一直在使用它:

Dim rs , cmd
Set rs = server.createobject("ADODB.Recordset")
Set cmd = server.createobject("ADODB.Command")
cmd.ActiveConnection = Application("ConnectionString")

cmd.CommandText = "DECLARE @GUID uniqueidentifier;SET @GUID = NEWID();SELECT @GUID as guid;"

cmd.CommandType = adCmdText
rs.CursorLocation = adUseClient
rs.Open cmd, , adOpenForwardOnly, adLockReadOnly

response.write rs(0)

我一直在用这个:

Dim rs , cmd
Set rs = server.createobject("ADODB.Recordset")
Set cmd = server.createobject("ADODB.Command")
cmd.ActiveConnection = Application("ConnectionString")

cmd.CommandText = "DECLARE @GUID uniqueidentifier;SET @GUID = NEWID();SELECT @GUID as guid;"

cmd.CommandType = adCmdText
rs.CursorLocation = adUseClient
rs.Open cmd, , adOpenForwardOnly, adLockReadOnly

response.write rs(0)

execute是否会返回多个记录集,每个SQL语句返回一个记录集?如果是这样的话,当您说res.nextRecordSets不工作时,您可能需要调用它-您是否收到错误消息,或者??是execute返回多个记录集,每个SQL语句一个记录集?如果是这样,当您说res.nextRecordSetNot work时,您可能需要调用res.nextRecordSets-您是否收到错误消息或??这基本上就是我正在做的,但在与请求的名称或序号对应的集合中找不到我得到的项。在response.write rs0上这基本上就是我正在做的,但是在与请求的名称或序号对应的集合中找不到我获取的项。在response.write上写入rs0