在 Azure 存储过程中使用 nvarchar(max)

问题描述 投票:0回答:1

我们正在测试从本地 MSSQL 数据库迁移到 Azure。

我们有一个旧的 ASP 经典站点,我们需要维护它,它创建一个 ADODB 命令来使用 MSSQL 存储过程存储电子邮件消息。 Body 列的类型为 nvarchar(max)。

ADODB代码如下:

set azurecon = Server.CreateObject("ADODB.Connection")
set azurecmd = Server.CreateObject("ADODB.Command")
azurecon.Open   sconn
azurecmd.ActiveConnection = azurecon
azurecmd.CommandType = 4
azurecmd.CommandText = "sp_add_mail"
azurecmd.Parameters.refresh
azurecmd.Parameters("@FromAddress")= fromemail
azurecmd.Parameters("@ToAddress")= toemail
azurecmd.Parameters("@Subject")= subject
azurecmd.Parameters("@Body")= body
azurecmd.Execute

存储过程是:

create PROCEDURE [dbo].[sp_add_mail] ( @FromAddress nvarchar(32), 
                                       @ToAddress nvarchar(48),
                                       @Subject nvarchar(160),
                                       @Body nvarchar(max))
AS
    INSERT INTO tbl_Mail(FromAddress, ToAddress, Subject, Body)
    VALUES ( @FromAddress, @ToAddress, @Subject, @Body )

我们将表和存储过程复制到Azure,但是在运行代码时,我们收到以下错误:参数对象定义不正确。提供的信息不一致或不完整。

但是,如果我们将存储过程从 @Body nvarchar(max) 更改为固定值,例如 @Body nvarchar(4000) ,一切都会正常。

向 Azure 发送 nvarchar(max) 参数时是否有不同的要求?

sql-server azure adodb nvarchar
1个回答
0
投票

使用以下作品:

azurecmd.Parameters("@Body").Size = -1 
azurecmd.Parameters("@Body")= body
© www.soinside.com 2019 - 2024. All rights reserved.