【问题标题】:getting value of newly inserted row获取新插入行的值
【发布时间】:2017-05-13 20:28:07
【问题描述】:

我正在尝试通过 vbscript 执行以下 sql 查询

declare @approvalid int, @userId int 
insert into [ApprovalMaster] ([Active], [DateCreated]) values('true',getdate())  
set @approvalid =SCOPE_IDENTITY() 
insert into [UserTable] ([Emailid], [password], [approvalid])
values('testmail.com','password', @approvalid)
Set @userid=SCOPE_IDENTITY()
Select @userid as [Userid]
set rsemail=server.CreateObject("Adodb.Recordset")
rsemail.open sqlstr,con

response.write rsemail("userid")

并得到以下错误

ADODB.Recordset 错误“800a0cc1”
在与请求的名称或序号对应的集合中找不到项目。

这些语句在 SQL Server management Studio 中运行良好 但是通过 vbscript 访问时出现错误

【问题讨论】:

  • 检查 CASE 可能吗? as [Userid]rsemail("userid")
  • 您的 SQL 语句是否在 SSMS 中运行?
  • 不要害怕在查询中添加一些格式和空格,以便于阅读。
  • 尝试将SET NOCOUNT ON 添加到查询的开头,操作中的行数可能会计为结果集,因此在您的第一个结果集中“(1 行受影响) " 没有userid 列。
  • 亲爱的 Gareth,感谢您的解决方案,它有效,设置 nocount 是解决方案,感谢您的帮助

标签: sql-server vbscript


【解决方案1】:

您也可以消除这两个变量。不需要有多个变量来保存只需要下一条语句的值。此外,正如 Gareth 建议的那样,添加 nocount 会有所帮助。这些方面的东西应该会让你非常接近。

set nocount on;

insert into ApprovalMaster
(
    Active
    , DateCreated
) 
values
(
    'true'
    , getdate()
);

insert into UserTable
(
    Emailid
    , password
    , approvalid
)
values
(
    'testmail.com'
    , 'password'
    , SCOPE_IDENTITY()
);

Select SCOPE_IDENTITY() as userid;
set rsemail=server.CreateObject("Adodb.Recordset")
rsemail.open sqlstr,con

response.write rsemail("userid")

【讨论】:

  • 亲爱的 Sean,感谢您的解决方案,它有效,设置 nocount on 是解决方案,您关于不使用变量的建议也很好,感谢您的帮助
  • 如果这可行,那么您应该考虑将其标记为解决方案。乐于助人。
  • 嗯...“按照 Gareth 的建议添加 nocount 会有所帮助”,它的作用不仅仅是帮助,它是修复,其他一切都只是绒毛。
【解决方案2】:

发生这种情况的原因是不产生 ADODB.Recordset 但输出计数的操作在 ADODB 中被解释为关闭的 Recordset 对象。

这意味着当你打电话时

rsemail.open sqlstr,con

您实际上是从第一个 INSERT 语句的输出计数中返回一个关闭的 ADODB.Recordset,而不是预期的 SELECT

修复很简单,在 cmets 中 was suggested@GarethD 提供。

尝试将SET NOCOUNT ON 添加到查询的开头

对于这种行为还有其他解决方法(但设置NOCOUNT ON 是迄今为止最简单的)

您可以使用NextRecordset 在查询中返回下一个ADODB.Recordset,这将是第二个INSERT,但第三次调用它会返回SELECT 的结果。

Set rsemail = rsemail.NextRecordset

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多