将图像ID附加到SQL Server中的图像文件名

时间:2014-12-24 05:43:08

标签: sql-server

通过使用xp_dirtree并通过做一些工作我能够将所有图像放入临时表中,现在我必须将其插入到具有标识列ImageID的主表中,同时我必须附加相同的imageid开始添加' _'的图像文件名称原始文件名

正在使用类似插入主表的查询

insert into tblImage(ImagePath)
SELECT fullpath + '\' + subdirectory 
FROM #Directory ORDER BY fullpath,subdirectory;

目前正在使用c#dot net中的循环来执行此操作....插入一个图像获取图像ID(scope_identity)并将其附加到文件名。

但随着图像数量的增加需要花费大量时间。

有没有更好的方法在sql server中完成此任务。

1 个答案:

答案 0 :(得分:0)

假设在插入之后,tblImage中的数据看起来像这样?

ImageID    ImagePath
1          somefilename.jpg
2          someotherfilename.jpg

标识值仅在插入后可用,因此您可以在初始批量插入后进行批量更新。插入过程中无法使用标识值。

UPDATE tblImage SET
    ImagePage = CONVERT(VARCHAR(10), ImageId) + ImagePath
WHERE (You'll have to specify a where clause to limit the update to the newly created records)

或者您可以将第3列添加到tblImage

UPDATE tblImage SET
    NewFileName = CONVERT(VARCHAR(10), ImageId) + '_' + ImagePath
WHERE NewFileName IS NULL

如果您需要更改磁盘上的文件名,我可以考虑两种可能的解决方案。

实现的第一个也是最快的,就是使用xp_cmdshell执行重命名语句。 (这假设ImagePage具有原始文件名,NewFileName具有新文件名。)

DECLARE @Cmd        NVARCHAR(MAX) = '';
SELECT @Cmd = @Cmd + 'EXEC xp_cmdshell ''rename "' + ImagePath + '" "' + NewFileName + '"''
'
FROM tblImage

EXEC (@CMD);

要使用xp_cmdshell,首先需要启用,因为默认情况下已禁用。

EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO

重命名磁盘上文件的第二个选项是在SQL Server中设置一个FileTable,指向包含要重命名的文件的目录。然后重命名文件成为一个简单的更新语句。

您可以阅读有关FileTables here

的更多信息

还有一些关于设置FileTables的非常全面的演练。

希望有所帮助。