Warning: file_put_contents(/datas/wwwroot/jiajiahui/core/caches/caches_template/2/default/show.php): failed to open stream: Permission denied in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 55

Warning: chmod(): Operation not permitted in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 56
将变量插入到SQL Server中 - 源码之家

将变量插入到SQL Server中

问题描述:

我正在使用Microsoft Sql Server 2008.我使用视图(dbo.building_piclink)获取照片名称(@imgName)并将照片插入文件中的表中。我还需要采取此照片的名称,并将其添加到一个名为att_name列,但我不能找出语法上的INSERT语句添加进去。将变量插入到SQL Server中

DECLARE @imgString varchar(800) 
DECLARE @insertString varchar(3000) 
DECLARE @imgNumber int 
Declare @imgName varchar(100) 

SET @imgNumber = 1 

WHILE @imgNumber <> 10 

BEGIN 

SELECT @imgName = Lower(items) FROM dbo.building_piclink 

SET @imgString = 'C:\Documents and Settings\Administrator\Desktop\photos\' + @imgName 


SET @insertString = 'INSERT INTO dbo._building__ATTACH (DATA) 
SELECT * FROM OPENROWSET(BULK N''' + @imgString + ''', SINGLE_BLOB) as tempImg' 

Print @insertString 

SET @imgNumber = @imgNumber + 1 

EXEC(@insertString) 

END 

GO 

我已经试过

SET @insertString = 'INSERT INTO dbo._building__ATTACH (DATA, ATTNAME) 
SELECT * FROM OPENROWSET(BULK N''' + @imgString + ''', SINGLE_BLOB) as tempImg,' + @imgName 

但我得到这样的错误:

消息208,级别16,状态1,行1无效的对象名称 'b26382_3_775682.jpg'

我曾尝试只是在做对att_name插入:

SET @insertString = 'INSERT INTO dbo._buildingpoint__ATTACH (ATT_NAME)' + @imgName 

没有运气。我在语法中缺少一些东西。

谢谢!

+1

我建议稍微简化以帮助隔离问题。如果你单独运行SELECT * FROM OPENROWSET ...查询是否工作? – 2011-12-14 20:24:40

嗯,是的,你插入的字符串是不正确的 - 现在,你喜欢的东西:

INSERT INTO dbo._building__ATTACH (DATA, ATTNAME) 
    SELECT * 
    FROM OPENROWSET(BULK N'b26382_3_775682.jpg', SINGLE_BLOB) as tempImg, b26382_3_775682.jpg 

如果要插入的文件名作为一个字符串,同时,你需要把它变成单引号(我也将扭转列在INSERT的顺序):

INSERT INTO dbo._building__ATTACH (ATTNAME, DATA) 
    SELECT 
     'b26382_3_775682.jpg', tempImg.* 
    FROM 
     OPENROWSET(BULK N'b26382_3_775682.jpg', SINGLE_BLOB) as tempImg 

而且,所有交易的乔恩建议:你可以尝试单独运行仅这INSERT说法,只是为了看看有没有什么声明对自己的作品是否正确?一旦有效 - 然后将其集成到您的存储过程中,并将其转换为动态SQL语句...

更新:是的 - 正如我在我的答案(从这里几行)中说的:您需要把你要插入attName到单引号的文件名 - 你的最新评论还没有做到这一点....

试试这个:

SET @insertString = 
    'INSERT INTO dbo._building__ATTACH (ATTNAME, DATA) ' + 
    'SELECT ''' + @imgName + ''', tempImg.* ' + 
    'FROM OPENROWSET(BULK N''' + @imgString + ''', SINGLE_BLOB) as tempImg' 

工作的呢?