السلام عليكم ورحمة الله وبركاته :
في الحقيقة إن حشر الصور مختلفة اللواحق في حقل من نوع Image هو شيء رائع .. وأظن أنكم تجدونه رائعاً أيضاً ..
لذا أقدم لكم هذه الإجرائية البسيطة الإستخدام لحشر أي صورة ترغب في حقل الـ Image >>>>> فما رأيكم أدامكم الله بخير ...
Use Tempdb
GO
Create PROCEDURE Insert_Image_From_File
@filename nvarchar(128)=NULL,
@table nvarchar(128)=NULL,
@column nvarchar(128)=NULL,
@where nvarchar(2000)=NULL
AS
SET NOCOUNT ON
IF (@filename is NULL) OR (@table is NULL) OR (@column is NULL) OR (@where is NULL)
BEGIN
PRINT 'Error : Calling Proc'
RETURN
END
DECLARE @i int, @size int, @blocks int, @cmd varchar(8000)
create table #filedetails
(
altname varchar(30),size int,
createdate varchar(32),createtime varchar(32),lastwrittendt varchar(30),
lastwrittentime varchar(32),lastaccessdt varchar(30),lastaccesstime varchar(32),
attributes int
)
insert into #filedetails exec master..xp_getfiledetails @filename
set @size=(select size from #filedetails)
if @size=null
BEGIN
PRINT 'File error.'
RETURN
END
drop table #filedetails
SET @blocks=@size/8000+1
Print @blocks
--start dynamic SQL declaration
SET @cmd='DECLARE @ptrval binary(16), @fso int, @file int, @i int,@j int, @hr int, @buffer varbinary(8000)
EXEC @hr = sp_OACreate ''ADODB.Stream'', @file OUT
EXEC @hr = sp_OAMethod @file, ''Open''
EXEC @hr = sp_oasetproperty @file, ''Type'', 1
EXEC @hr = sp_oasetproperty @file, ''LoadFromFile'','''+@filename+'''
SELECT @ptrval = TEXTPTR('+@column+') FROM '+ @table + ' ' + @where + '
Set @j='+str(@blocks)+'
if @j > 0
begin
exec @hr = sp_oamethod @file, ''read'', @buffer out , 8000
WriteText '+@table+'.'+@column+' @ptrval @buffer
Set @j = @j - 1
end
while @j>0
begin
exec @hr = sp_oamethod @file, ''read'', @buffer out , 8000
Set @i=(select DATALENGTH('+@column+') from '+@table+' '+@where+')
UPDATETEXT '+@table+'.'+@column+' @ptrval @i 0 @buffer
Set @j=@j-1
end
--execut dynamic SQL
EXEC @hr = sp_OAMethod @file, ''Close''
EXEC @hr = sp_OADestroy @file EXEC @hr = sp_OADestroy @fso'
-- print @cmd
Exec( @cmd)
GOاختبار الإجراء :
Create Table Image_TB(id identity(0,1) , image_Col Image Default Null) Go Insert Image_TB Default Values Go Exec Insert_Image_From_File 'C:\Greenstone.gif', 'Image_TB ', 'image_Col', 'Where id =0' Exec Insert_Image_From_File 'C:\Greenstone.bmp', 'Image_TB ', 'image_Col', 'Where id =0' Exec Insert_Image_From_File 'C:\Greenstone.jpg', 'Image_TB ', 'image_Col', 'Where id =0' Exec Insert_Image_From_File 'C:\Greenstone.png', 'Image_TB ', 'image_Col', 'Where id =0'
أتمنى لكم استخداماً مريحاً ... ونوماً عميقاً :)
