将变量插入到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
没有运气。我在语法中缺少一些东西。
谢谢!
答
嗯,是的,你插入的字符串是不正确的 - 现在,你喜欢的东西:
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'
工作的呢?
我建议稍微简化以帮助隔离问题。如果你单独运行SELECT * FROM OPENROWSET ...查询是否工作? – 2011-12-14 20:24:40