迁移问题:从Windows Server 2003/SQL Server 2000到Windows Server 2008 R2/SQL Server 2012的ASP经典应用程序中的错误“80040e14”

问题描述:

首先,我想让你知道我不是工程师,我是只是一个在我的工作范围内工作的网页设计师。我们有一系列在Windows Server 2003/SQL 2000环境中运行的ASP经典应用程序。该公司购买了一台装有Windows Server 2008R2和SQL 2012的新服务器,他们让我可以将应用程序迁移到新服务器上。我几个星期阅读和阅读了很多关于这方面的手册和文档,除了其中一个应用外,我完成了我的任务。该应用程序产生和创建和接口来回答调查。这很奇怪,因为登录页面工作正常:你把你的用户名和通行证,你进入管理区域,数据库中存储的选项显示没有问题,但当我试图进入调查回答它浏览器给我这样的:迁移问题:从Windows Server 2003/SQL Server 2000到Windows Server 2008 R2/SQL Server 2012的ASP经典应用程序中的错误“80040e14”

Microsoft OLE DB提供程序的ODBC驱动程序错误 '80040E14'

[微软] [ODBC SQL Server驱动程序] [SQL服务器]附近有语法错误@errno“。

/SEL/Encuesta/preguntatodo_nuevo.asp,拉利内阿108

那么这里就是我在/SEL/Encuesta/preguntatodo_nuevo.asp发现,拉利内阿108:

sSQL = "Update UsuariosClima set NumCuestContestados = NumCuestContestados+1 Where IDUsuario = " & IDUsuario 
conn.Execute(sSQL) 

我知道这是很难用这些信息来帮助我,所以如果你需要更多的数据,请告诉我。我不想让你去做我的工作,如果有人能够带领我走向正确的方向,我会一个人继续。非常非常感谢你。

请记住:我不是一个egineer,像我小时候那样向我解释。

UPDATE - 触发在UsuariosClima:

tD_Usuarios:

ALTER trigger tD_Usuarios on dbo.UsuariosClima for DELETE as 

begin 
declare @errno int, 
     @errmsg varchar(255) 

if exists (
    select * from deleted,AccesoCuestionarioClima 
    where 

    AccesoCuestionarioClima.IDUsuario = deleted.IDUsuario 
) 
begin 
    select @errno = 30001, 
     @errmsg = 'Cannot DELETE "Usuarios" because "AccesoCuestionario" exists.' 
    goto error 
end 

if exists (
    select * from deleted,AccesoClienteClima 
    where 

    AccesoClienteClima.IDUsuario = deleted.IDUsuario 
) 
begin 
    select @errno = 30001, 
     @errmsg = 'Cannot DELETE "Usuarios" because "AccesoCliente" exists.' 
    goto error 
end 

if exists (
    select * from deleted,PertenenciaClima 
    where 

    PertenenciaClima.IDUsuario = deleted.IDUsuario 
) 
begin 
    select @errno = 30001, 
     @errmsg = 'Cannot DELETE "Usuarios" because "Pertenencia" exists.' 
    goto error 
end 

update RespuestaCuestionariosClima 
    set 

    RespuestaCuestionariosClima.IDUsuario = NULL 
    from RespuestaCuestionariosClima,deleted 
    where 

    RespuestaCuestionariosClima.IDUsuario = deleted.IDUsuario 

return 
error: 
raiserror @errno @errmsg 
rollback transaction 
end 

tU_Usuarios:

ALTER trigger tU_Usuarios on dbo.UsuariosClima for UPDATE as 
begin 
    declare @numrows int, 
     @nullcnt int, 
     @validcnt int, 
     @insIDUsuario int, 
     @errno int, 
     @errmsg varchar(255) 
    select @numrows = @@rowcount 

    if 

    update(IDUsuario) 
    begin 
    if exists (
     select * from deleted,AccesoCuestionarioClima 
     where 

    AccesoCuestionarioClima.IDUsuario = deleted.IDUsuario 
) 
begin 
    select @errno = 30005, 
     @errmsg = 'Cannot UPDATE "UsuariosClima" because "AccesoCuestionarioClima" exists.' 
    goto error 
end 
    end 

    if 

update(IDUsuario) 
    begin 
if exists (
    select * from deleted,AccesoClienteClima 
    where 

    AccesoClienteClima.IDUsuario = deleted.IDUsuario 
) 
begin 
    select @errno = 30005, 
     @errmsg = 'Cannot UPDATE "UsuariosClima" because "AccesoClienteClima" exists.' 
    goto error 
end 
    end 

    if 

update(IDUsuario) 
    begin 
if exists (
    select * from deleted,PertenenciaClima 
    where 

    PertenenciaClima.IDUsuario = deleted.IDUsuario 
) 
begin 
    select @errno = 30005, 
     @errmsg = 'Cannot UPDATE "UsuariosClima" because "PertenenciaClima" exists.' 
    goto error 
end 
    end 

    if 

update(IDUsuario) 
    begin 
update RespuestaCuestionariosClima 
    set 

    RespuestaCuestionariosClima.IDUsuario = NULL 
    from RespuestaCuestionariosClima,deleted 
    where 

    RespuestaCuestionariosClima.IDUsuario = deleted.IDUsuario 
end 

return 
error: 
raiserror @errno @errmsg 
rollback transaction 
end 
+0

这条线上下有5条线是什么? – Ghost 2012-07-13 18:12:44

+0

嗨鬼,我在问题的最后添加了几行。 Tnanks。 – 2012-07-13 18:19:50

+0

只是猜测,但UsuariosClima有没有触发器?错误消息表明@errno被以某种方式引用,在代码中似乎不是这样的情况 – Ghost 2012-07-13 18:24:23

乍一看,我相信你的描述可能的第一个错误无非是一种语法在tU_Usarios触发器中调用raiserror时出错。我相信这会在上面的“第108行”中反映为错误,因为更新是导致错误的原因,但调用RAISERROR的代码会将问题带回原始语句。发生更新时,触发器触发,在捕获到的触发器代码中发生错误,但是当控制传递给调用RAISERROR的代码时,语法错误出现在“@errno”处。

我相信RAISERROR的参数需要在包含在括号内的逗号分隔列表中提供。我相信参数的最小数量是三个 - 一个消息ID或字符串,后跟一个严重性代码,以及然后是一个州代码。大多数情况下,最后两个值最终分别是16和1。

+0

由于它们正在迁移到SQL Server 2012,所以两个触发器(更新和删除)应该从'RAISERROR'更改为'THROW'为了做到这一点,他应该将(两者都行)改为'THROW @errno,@ errmsg,2;' – Ghost 2012-07-13 20:41:15

+0

谢谢你们。鬼是对的,它似乎正常工作!将做一些测试,以确保!再次感谢! – 2012-07-13 23:51:55

我把答案放在这里,使其更加明显。谢谢。

由于它们正在迁移到SQL Server 2012,所以两个触发器(更新和删除)都应该从RAISERROR更改为THROW。为此,他应该将行(两者都改为)THROW @errno,@errmsg, 2; - 幽灵

+0

哇,拿走一个被接受的答案,自己发布一个不同的答案,然后自己接受它?哇。哇哇! – 2012-10-15 18:58:33

+0

uuuups ....不是我的意图 – 2012-10-16 01:59:19