使用变量插入SQL Server

时间:2011-12-14 20:16:09

标签: sql-server-2008 variables insert

我正在使用Microsoft Sql Server 2008.我使用视图(dbo.building_piclink)来获取照片名称(@imgName)并将照片插入文件的表格中。我还需要获取此照片名称并将其添加到名为att_name的列中,但我无法弄清楚插入语句中的语法以将其添加到其中。

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 个答案:

答案 0 :(得分:1)

嗯,是的,你的插入字符串不正确 - 现在,你得到类似的东西:

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 

此外,正如所有交易的Jon建议的那样:您是否可以尝试单独运行此INSERT语句,只是为了查看该语句本身是否正常工作?一旦工作 - 然后将其集成到您的存储过程中并将其转换为动态SQL语句...

更新:是 - 正如我在回答中所说的那样(从这里开始几行):您需要将要插入attName的文件名放入单引号中 - 你的最新评论仍然没有这样做....

试试这个:

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

这有用吗?