Problema 1:
Qual é a melhor maneira de converter colunas de IMAGEM para varbinary(MAX)?
Estou apenas testando minha aplicação que roda no SQL 2008 r2 (mas em modo de compatibilidade 80 - SQL Server 2000).
Provavelmente tenho muito trabalho a fazer, principalmente com recursos obsoletos (como a sintaxe pb *= que não é mais usada, mas sim inner join).
Descubro que o tipo de dados IMAGEM será obsoleto, mas deve ser uma cópia direta para varbinary(MAX).
Agora, o problema aqui é que as 3 maiores tabelas do meu banco de dados têm 76 GB, 32 GB, 7 GB.
ex. 1: isso pode funcionar (por favor me avise se não). exceto que enche o log do banco de dados e o mata.
update tblcasereporttrans set userreportimage2 = userreportimage
GO
ALTER TABLE tblcasereporttrans DROP COLUMN userreportimage
GO
exec sp_rename 'tblcasereporttrans.userreportimage2','userreportimage','COLUMN'
GO
Pessoalmente, acredito que uma restauração do banco de dados pode ser a melhor maneira de fazer isso, mas como posso fazer para restaurar em um tipo de coluna diferente?
Restaurar o banco de dados completo em um banco de dados de teste leva 13 minutos, 786.896 segundos (154.579 MB/seg).
Suspeito que qualquer outra forma levará muito mais tempo.
-----
Problema 2:
Agora estou fazendo um teste com (então suponho que, se necessário, posso repeti-lo 5000 vezes e manter o arquivo de log sob controle... (ainda assim, não será bom para minhas cópias de segurança externas/instantâneas, acredito)
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
então eu pego meus dados (documento do Word) e parece estar corrompido.
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 // FALHA AQUI
então alguma sugestão melhor para ambos os problemas?