使用字符串连接在Sql server表中插入Image Datatype

时间:2015-06-02 15:43:38

标签: sql-server image

我在存储过程中有以下参数

@DatabaseName varchar(80)
@aImage image
@id int

查询我想执行

set @sql =' insert into '@txtDatabase+'..Documentimages(id,image) 
             values ('+ @id +', '+ @aImage + ' )

以上陈述不起作用。

请建议适当的。

1 个答案:

答案 0 :(得分:1)

我的解决方案通过使用临时表来避免连接。 否则,您必须将IMAGE转换为VARCHAR(MAX),注入攻击的可能性会增加。

begin transaction 
-- SETUP stuff
use dbapp
create table dscat.dbo.Documentimages (id int, [image] VARBINARY(max))
go

-- Your Prodcedure: 
create procedure p_Test
    @DatabaseName SYSNAME,
    @aImage VARBINARY(max),
    @id int
as 
-- use a temp table to hold the data for the INSERT
SELECT @id as ID , @aImage as [aImage] INTO #ImageTemp
DECLARE @SQL VARCHAR(200)
set @sql =' insert into ['+ @DatabaseName +'].dbo.Documentimages(id,image) 
         SELECT ID, aImage FROM #ImageTemp'
EXEC (@sql)

GO

-- TEST IT: (not a valid image...)
EXEC p_test 'dscat',0xFFD8FFE000104A4649FDDC7FDF36D, 86

select *, DATALENGTH([image]) from dscat.dbo.Documentimages
ROLLBACK

我也冒昧使用

  • VARBINARY(max)而不是已弃用的IMAGE类型。
  • SYSNAME表示数据库名称参数
  • 包括您dbo的{​​{1}};您的架构可能不同 - 但使用完全限定名称可简化动态执行。否则,SQL必须通过用户/执行上下文,并查看哪个模式是第一个拥有该表的模式...