Problema 1:
¿Cuál es la mejor manera de convertir columnas de IMAGEN a varbinary(MAX)?
Solo estoy probando mi aplicación que se ejecuta en SQL 2008 r2 (pero en modo de compatibilidad 80 (SQL Server 2000).
Probablemente tenga mucho trabajo por hacer, principalmente con características obsoletas (como ya no se usa la sintaxis pb *= pero se usa inner join).
Así que descubro que el tipo de datos IMAGEN será obsoleto, pero debería ser una copia directa a varbinary(MAX).
Ahora, el problema aquí es que las 3 tablas más grandes de mi base de datos son de 76 GB, 32 GB, 7 GB.
ej. 1: esto podría funcionar (por favor avíseme si no). excepto que llena el registro de la base de datos y lo mata.
update tblcasereporttrans set userreportimage2 = userreportimage
GO
ALTER TABLE tblcasereporttrans DROP COLUMN userreportimage
GO
exec sp_rename 'tblcasereporttrans.userreportimage2','userreportimage','COLUMN'
GO
Personalmente creo que una restauración desde la base de datos podría ser la mejor manera de hacerlo, pero ¿cómo puedo hacer que se restaure a un tipo de columna diferente?
Restaurar la base de datos completa en una base de datos de prueba lleva 13 minutos, 786.896 segundos (154.579 MB/seg).
Sospecho que cualquiera de las otras formas tomará mucho más tiempo.
-----
Problema 2:
Así que ahora estoy haciendo una prueba con (así que supongo que si es necesario, puedo repetirla 5000 veces y mantener el archivo de registro bajo control... (aún así, no va a ser bueno para mis copias de seguridad externas/instantáneas, creo)
SET ROWCOUNT 40
GO
WHILE EXISTS (SELECT * FROM tblcasereporttrans where userreportimage2 is null)
BEGIN
update tblcasereporttrans set userreportimage2 = userreportimage where userreportimage2 is null
END
GO
ALTER TABLE tblcasereporttrans DROP COLUMN userreportimage
GO
exec sp_rename 'tblcasereporttrans.userreportimage2','userreportimage','COLUMN'
GO
luego voy y saco mis datos (documento de Word) y parece estar corrupto.
selectblob tblCaseReportTrans.UserReportImage
into :lb_doc
from tblCaseReportTrans
where tblCaseReportTrans.JobReferenceNo = :ls_refno and
tblCaseReportTrans.Reportid = :ls_reportid and
tblCaseReportTrans.create_date = :ldt_create;
if SQLCA.SQLCode < 0 then
f_display_msg("E", 5000, SQLCA.SQLErrText)
end if
if IsNull(lb_doc) then
Messagebox("error","error in blobdata")
return
end if
f_write_blob(lb_doc, f_gettemppath() + "CTSTEMP-CO-" +ls_reportid +"-" + string(f_getdate(),"yyyymmddhhmm") + "-" + ls_refno + ".doc")
ole_1.objectdata = lb_doc // FALLA AQUÍ
así que ¿alguna sugerencia mejor para ambos problemas?