从文件路径插入图像 - 未在select语句中获取值

时间:2011-12-13 21:20:26

标签: sql-server-2008 insert photo

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

SET @imgNumber = 1

WHILE @imgNumber<> 101

BEGIN

SET @imgName = 'SELECT (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'

SET @imgNumber = @imgNumber + 1

END

GO

我遇到了@imgName的问题。我无法弄清楚如何从select语句中获取值而不是如下所示的(items):

C:\Documents and Settings\Administrator\Desktop\photos\SELECT (items) FROM dbo.building_piclink

谢谢!

1 个答案:

答案 0 :(得分:0)

您的代码有几个问题:

1)您正在从视图中选择一个文件名 - 但如果该视图包含多个条目会怎么样?你选择哪个文件名?您当前的代码首先不会完全有效,即使它正在工作 - 您仍然可能会将数百个文件名选择为单个变量 - 这当然不会起作用.... / p>

所以你首先需要解决这个问题:

SET @imgName = 'SELECT (items) FROM dbo.building_piclink'

首先 - 松散单引号:

SELECT @imgName = (items) FROM dbo.building_piclink

但是现在 - 你有一个可以选择的唯一ID吗?或者你想获得第一个条目(无论是什么)??

所以你需要:

SELECT @imgName = ImageFileName FROM dbo.building_piclink WHERE .......... 

并在WHERE子句中填入一个条件,该条件保证只返回一行,或使用TOP 1

SELECT TOP (1) @imgName = ImageFileName  FROM dbo.building_piclink 

在这种情况下 - 你只需要获得一个文件名 - 如果你没有指定ORDER BY,那么你无法保证你会得到什么 - 也许你会想要添加一个{{1或者某些东西来优先考虑你先得到哪些文件名。

2)您加载图像数据的代码也是不可行的 - 您需要做的是将SQL语句构建为字符串,然后执行它(称为动态SQL ) - 像这样的东西:

ORDER BY DueDate

通过这两个修复程序,你应该开始使用这个东西了