迁移问题:从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
乍一看,我相信你的描述可能的第一个错误无非是一种语法在tU_Usarios触发器中调用raiserror时出错。我相信这会在上面的“第108行”中反映为错误,因为更新是导致错误的原因,但调用RAISERROR的代码会将问题带回原始语句。发生更新时,触发器触发,在捕获到的触发器代码中发生错误,但是当控制传递给调用RAISERROR的代码时,语法错误出现在“@errno”处。
我相信RAISERROR的参数需要在包含在括号内的逗号分隔列表中提供。我相信参数的最小数量是三个 - 一个消息ID或字符串,后跟一个严重性代码,以及然后是一个州代码。大多数情况下,最后两个值最终分别是16和1。
由于它们正在迁移到SQL Server 2012,所以两个触发器(更新和删除)应该从'RAISERROR'更改为'THROW'为了做到这一点,他应该将(两者都行)改为'THROW @errno,@ errmsg,2;' – Ghost 2012-07-13 20:41:15
谢谢你们。鬼是对的,它似乎正常工作!将做一些测试,以确保!再次感谢! – 2012-07-13 23:51:55
我把答案放在这里,使其更加明显。谢谢。
由于它们正在迁移到SQL Server 2012,所以两个触发器(更新和删除)都应该从RAISERROR更改为THROW。为此,他应该将行(两者都改为)THROW @errno,@errmsg, 2; - 幽灵
哇,拿走一个被接受的答案,自己发布一个不同的答案,然后自己接受它?哇。哇哇! – 2012-10-15 18:58:33
uuuups ....不是我的意图 – 2012-10-16 01:59:19
这条线上下有5条线是什么? – Ghost 2012-07-13 18:12:44
嗨鬼,我在问题的最后添加了几行。 Tnanks。 – 2012-07-13 18:19:50
只是猜测,但UsuariosClima有没有触发器?错误消息表明@errno被以某种方式引用,在代码中似乎不是这样的情况 – Ghost 2012-07-13 18:24:23