通过使用xp_dirtree和做一些工作,我能够将所有的图像放到一个临时表中,现在我必须将相同的图像插入到主表中,其中包含标识列ImageID,同时我还必须将相同的图像添加到添加了'_‘原始文件名的图像文件名的开头。
正在使用类似于插入主表的查询。
insert into tblImage(ImagePath)
SELECT fullpath + '\' + subdirectory
FROM #Directory ORDER BY fullpath,subdirectory;目前正在c#网点网中使用循环.当插入一个图像时,获取图像id (scope_identity)并将其附加到文件名中。
但是,随着图像数量的增加,需要花费大量的时间。
是否有更好的方法仅在sql server中完成此操作。
发布于 2014-12-24 20:49:26
假设在插入之后,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)也可以在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,首先需要启用if,因为默认情况下它是禁用的。
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO重命名磁盘上文件的第二个选项是在Server中设置一个指向包含要重命名文件的目录的FileTable。然后,文件的重命名变成一个简单的update语句。
您可以阅读更多关于FileTables 这里的内容。
还有几个关于设置FileTables的非常全面的演练。
希望这能有所帮助。
https://stackoverflow.com/questions/27632078
复制相似问题