首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将图像ID附加到Server中的图像文件名

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

Stack Overflow用户
提问于 2014-12-24 05:43:08
回答 1查看 265关注 0票数 0

通过使用xp_dirtree和做一些工作,我能够将所有的图像放到一个临时表中,现在我必须将相同的图像插入到主表中,其中包含标识列ImageID,同时我还必须将相同的图像添加到添加了'_‘原始文件名的图像文件名的开头。

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

代码语言:javascript
复制
insert into tblImage(ImagePath)
SELECT fullpath + '\' + subdirectory 
FROM #Directory ORDER BY fullpath,subdirectory;

目前正在c#网点网中使用循环.当插入一个图像时,获取图像id (scope_identity)并将其附加到文件名中。

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

是否有更好的方法仅在sql server中完成此操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-24 20:49:26

假设在插入之后,tblImage中的数据将如下所示?

代码语言:javascript
复制
ImageID    ImagePath
1          somefilename.jpg
2          someotherfilename.jpg

标识值仅在插入后可用,因此您可以在初始大容量插入之后执行大容量更新。在插入期间,标识值不可用。

代码语言:javascript
复制
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)

也可以在tblImage中添加第三列

代码语言:javascript
复制
UPDATE tblImage SET
    NewFileName = CONVERT(VARCHAR(10), ImageId) + '_' + ImagePath
WHERE NewFileName IS NULL

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

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

代码语言:javascript
复制
DECLARE @Cmd        NVARCHAR(MAX) = '';
SELECT @Cmd = @Cmd + 'EXEC xp_cmdshell ''rename "' + ImagePath + '" "' + NewFileName + '"''
'
FROM tblImage

EXEC (@CMD);

要使用xp_cmdshell,首先需要启用if,因为默认情况下它是禁用的。

代码语言:javascript
复制
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO

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

您可以阅读更多关于FileTables 这里的内容。

还有几个关于设置FileTables的非常全面的演练。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27632078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档