Ciao a tutti.
Tra poco, dice Microsoft, i tipi di dati image non saranno più gestiti. Al loro posto usare varbinary. Mi trovo a dover modificare delle store procedure ereditate che lavorano su campi di tipo image.
Dovrei convertirle per l'uso con varbinary. Si tratta di SP che gestiscono file immagine il cui nome è ricevuto da programma.
La table, è impostata così:
CREATE TABLE [dbo].[blobs] (
[blob] [decimal](11, 0) IDENTITY (1, 1) NOT NULL ,
[name] [char] (30) NOT NULL ,
[size] [int] NULL,
[file] [image] NULL ,
[id_row] [timestamp] NOT NULL
) ON [PRIMARY]
le store procedure sono più di una, ma quelle più problematiche sono quelle in cui si usa TEXTPTR e UPDATETEXT che andranno convertite per l'uso con la colonna file di tipo varbinary.
Sono in difficoltà, lo ammetto. Qualcuno ha voglia di darmi un suggerimento?
Grazie in anticipo.
--------
Gigi
--------
CREATE PROCEDURE cp_blob_temp
AS
DECLARE @TimeStr varchar(30), @INDEX INT, @CHAR CHAR(1)
SET @TIMESTR = convert(varchar(30),GETDATE(),20)
SET @INDEX = 1
WHILE @INDEX <= LEN(@TIMESTR)
BEGIN
SET @CHAR = SUBSTRING(@TIMESTR,@INDEX,1)
IF (ASCII(@CHAR)< 48) or (ASCII(@CHAR)> 57)
SET @TIMESTR = STUFF(@TIMESTR,@INDEX,1,'_')
SET @INDEX = @INDEX +1
END
EXEC ('CREATE TABLE blob_temp'+@TimeStr+' (
[blob] decimal(11,0),
[SIZE] int,
[NAME] varchar(50),
[FILE] Image,
[POS] int)')
Exec('CREATE TRIGGER insertImage'+@TIMESTR+'
ON blob_temp'+@TIMEstr+'
FOR INSERT
AS
BEGIN
DECLARE @ptrval binary(16), @SIZE int, @NAME varchar(40),@blob decimal(11,0)
DECLARE @ptrval1 varbinary(16), @INS decimal(2,0),@poz int
SELECT @ptrval1 = TEXTPTR([file]), @blob = blob, @poz = POS
FROM blob_temp'+@TIMESTR+'
SELECT @ptrval = TEXTPTR([FILE])
FROM blobs WHERE blob = @blob
if @poz =0
UPDATETEXT [blobs].[FILE] @ptrval 0 NULL [blob_temp'+@TIMESTR+'].[FILE] @ptrval1
else
UPDATETEXT [blobs].[FILE] @ptrval null NULL [blob_temp'+@TIMESTR+'].[FILE] @ptrval1
delete from blob_temp'+@TIMESTR+' where blob = @blob
END')
select 'blob_temp'+@TIMESTR
GO
CREATE PROCEDURE cp_chunkSet
@BLOB decimal(11,0),
@ROZ int
AS
DECLARE @PTRVAL1 varbinary(16), @POZ int, @INDEX int, @RESZTA int
BEGIN TRANSACTION
SELECT @PTRVAL1 = TEXTPTR([FILE])
FROM blobs WHERE blob = @BLOB
SET @POZ = 0
IF (@ROZ >512000)
SET @INDEX = 512000
ELSE
SET @INDEX = @ROZ
SET @RESZTA = @ROZ
WHILE (@INDEX <= @ROZ)
BEGIN
IF @INDEX = @ROZ
BEGIN
READTEXT [blobs].[FILE] @PTRVAL1 @POZ @RESZTA
SET @INDEX =@INDEX +100
END
ELSE
BEGIN
READTEXT [blobs].[FILE] @PTRVAL1 @POZ 512000
SET @POZ = @INDEX
SET @INDEX = @INDEX +512000
IF @INDEX > @ROZ
BEGIN
SET @RESZTA = 512000 - (@INDEX - @ROZ)
SET @INDEX = @ROZ
END
END
END
COMMIT TRANSACTION