Как я могу в Classic ASP / VBScript получить значение переменной, установленной с помощью SET @local_variable? - PullRequest
1 голос
/ 16 марта 2011

У меня есть таблица с полем типа uniqueidentifier , который будет заполнен вызовом NEWID().

Что бы якак сделать, это вернуть GUID, который был создан сразу после того, как я вставил запись в таблицу.

Если я запускаю какой-то SQL, например, следующий из SQL Management Studio, он, очень услужливо, выводит значениемой GUID

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

Мой вопрос: как я могу получить значение @GUID из Classic ASP с помощью VBScript?

Я пробовал это

<%
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 ]

3 голосов
/ 17 марта 2011

Похоже, вы упростили свой запрос.Показанный фрагмент работает как есть.

Если, однако, вы выполняете хранимый запрос proc или несколько операторов, conn.execute может вернуть несколько наборов записей, которые можно выполнить, используя RecordSet.nextRecordSet* 1005.* пока не дойдете до последнего.

Сообщения о состоянии также могут мешать наборам записей, поэтому убедитесь, что вы используете SET NOCOUNT ON в пакетах с несколькими операторами.

1 голос
/ 17 марта 2011

Я использую это все время:

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)
0 голосов
/ 17 марта 2011

Может быть, я неправильно читаю, но что, если вы сделали что-то вроде этого:

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

...