Ошибка отображения результата функции sql в msgbox - PullRequest
0 голосов
/ 01 октября 2018

У меня есть функция SQL, которая принимает 1 ввод и возвращает результат varchar.Это прекрасно работает при выполнении в SSMS, но дает несоответствие типов ошибок во время выполнения при попытке отобразить из VBScript.Я намерен использовать эту переменную для извлечения других данных в другом разделе кода.Я просто использую дисплей, чтобы визуализировать то, что я получаю, и чтобы помочь мне понять, что я делаю.

Функция SQL:

ALTER FUNCTION [dbo].[ufnGetLongModelFromSerial] (@serial varchar(8)) returns varchar(30)

AS

BEGIN
  RETURN (SELECT LongModel
  FROM [dbo].[Compressor], [dbo].[Models]
  WHERE [Compressor].[Serial] = @serial AND [dbo].[Compressor].[Model] = [dbo].[Models].[Model])
END
GO

--print result of function for testing
DECLARE @serial varchar(8) = '18HE3712'
PRINT [dbo].[ufnGetLongModelFromSerial] (@serial)

VBScript:

Option Explicit

'see http://www.w3schools.com/ado/ado_datatypes.asp
Const adParamInput = 1
Const adParamOutput = 2
Const adParamInputOutput = 3
Const adParamReturnValue = 4

Const adVarChar = 200

Const sSourceServer = "myserver"
Const sSourceDB = "myDB"

Dim connstr
Dim cmd
Dim SP_Name
Dim serial
Dim longModel

SP_Name = "ufnGetLongModelFromSerial"
connstr = "Provider=SQLOLEDB;Data Source=" & sSourceServer & "; Initial Catalog=" & sSourceDB & ";User Id=myid; Password=mypassword;"

Set serial = CreateObject("ADODB.Parameter")
serial.Direction = adParamInput
serial.Name = "serial"
serial.Size = 30
serial.Type = adVarChar
serial.Value = "18HD0363"

'set up sql command object
Set cmd = CreateObject("ADODB.Command")
With cmd
  .ActiveConnection = connstr
  .CommandType = 4
  .CommandText = SP_Name
  .Parameters.Append serial
End With

'execute command object and set local variable longModel to equal result of select statement in stored procedure
longModel = cmd.Execute

Wscript.Echo longModel
'tidy up and remove objects
Set serial = Nothing
Set cmd = Nothing

1 Ответ

0 голосов
/ 01 октября 2018

Поскольку cmd.Execute возвращает объект Recordset, вы должны написать

WScript.Echo longModel(0)

См. Также здесь

VBScript - получение скалярного значения из хранимой процедуры в SQL Server 2008

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...