我正在使用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
没有运气。我在语法中遗漏了一些东西。
谢谢!
答案 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'
这有用吗?