在Classic ASP / VBScript中,如何使用SET @local_variable获取变量集的值?

时间:2011-03-16 20:52:55

标签: sql-server vbscript asp-classic

我有一个包含uniqueidentifier类型字段的表格,该字段将通过调用NEWID()来填充。

我想要做的是在我将记录插入表格后立即取回创建的GUID。

如果我从SQL Management Studio运行如下的SQL,那么非常有用,打印出我的GUID的值

DECLARE @GUID uniqueidentifier;SET @GUID = NEWID();SELECT @GUID as guid;

我的问题是,如何使用VBScript从Classic 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字段错误。

我得到的错误是在我尝试读取res("guid") >

3 个答案:

答案 0 :(得分:3)

看起来您已经简化了查询。显示的代码段按原样运行。

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

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

答案 1 :(得分:1)

我一直都在使用它:

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)

答案 2 :(得分:0)

也许我误读了,但是如果你做了这样的话会怎么样:

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调用存储过程:http://support.microsoft.com/kb/164485