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
谢谢!
答案 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
通过这两个修复程序,你应该开始使用这个东西了