Sql 如何使用表中的文件名进行BCP查询?
我正在使用BCP将许多blob提取到文件中,并想知道是否有一种方法可以使用SQL表中的ID字段为每个文件指定一个唯一的名称。 这项工作:Sql 如何使用表中的文件名进行BCP查询?,sql,bcp,Sql,Bcp,我正在使用BCP将许多blob提取到文件中,并想知道是否有一种方法可以使用SQL表中的ID字段为每个文件指定一个唯一的名称。 这项工作: DECLARE @Command NVARCHAR(4000) SET @Command = 'bcp "SELECT FileData FROM MyDB.dbo.Attachments WHERE Hist_ID = ''00004F13''" queryout "C:\Wha.pd
DECLARE @Command NVARCHAR(4000)
SET @Command = 'bcp "SELECT FileData FROM MyDB.dbo.Attachments
WHERE Hist_ID = ''00004F13''"
queryout "C:\Wha.pdf" -T -c -C RAW -S SERVERNAME -U SA -P pa$$word'
EXEC xp_cmdshell @Command
但是为了获得文件名,我尝试了:
DECLARE @FileName varchar(50),
@Command NVARCHAR(4000)
SET @FileName = Hist_ID+'wha.PDF'
SET @Command = 'bcp "SELECT FileData FROM MyDB.dbo.Attachments
WHERE Hist_ID = ''00004F13''" queryout'
SET @Command = @Command + 'C:\' + @FileName + '-T -c -C RAW
-S SERVERNAME -U SA -P pa$$word'
EXEC xp_cmdshell @Command
我收到一个错误:列名“Hist_ID”无效。
有没有办法做到这一点?谢谢你的帮助 试试这个。这是我知道的一次只能执行一行的唯一方法 这段代码只是打印命令。取消对xp_cmdshell的注释,使其实际运行。您可能希望首先从一个小样本开始,限制select
DECLARE @Hist_ID VARCHAR(100)
DECLARE @Ext VARCHAR(10)
DECLARE @Command NVARCHAR(4000)
DECLARE cAttachments CURSOR FOR
SELECT DISTINCT Hist_ID,Extension
FROM MyDB.dbo.Attachments
ORDER BY Hist_ID
OPEN cAttachments
FETCH NEXT FROM cAttachments
INTO @Hist_ID, @Ext
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Command = 'bcp "SELECT FileData FROM MyDB.dbo.Attachments
WHERE Hist_ID = ''' + @Hist_ID + '''"
queryout "C:\' + @Hist_ID + '.' + @Ext + '" -T -c -C RAW -S SERVERNAME -U SA -P pa$$word'
PRINT @Command
-- EXEC xp_cmdshell @Command
FETCH NEXT FROM cAttachments
INTO @Hist_ID, @Ext
END
CLOSE cAttachments
DEALLOCATE cAttachments
您需要使用游标遍历MyDB.dbo.Attachments,动态构建SQL并按行执行。有比我更热情的人可能会发布这篇文章,如果没有其他人,我也会发布。如果你能,那就太棒了,尼克!非常感谢。大家好,我迫切需要一个解决方案。我搜索了所有地方,只找到了如何将datetime添加到您的bcp文件名中。提前感谢你能给予的任何帮助。太好了。谢谢你,尼克。这是可行的,但我有两个问题:1。对于某些行,我会收到此错误,因为在将varchar值“0000400B”转换为int.2数据类型时,Hist_ID具有alpha字符:[Microsoft][SQL Server Native Client 10.0][SQL Server]转换失败。我忘了补充一点,我还需要从同一个表中的一列中提取文件扩展名,扩展名会有所不同。我怎样才能将其添加到文件名中?再次感谢。好的,我已经修复了转换错误,并为您的扩展添加了一列。试试看,效果很好!刚刚在FETCH NEXT子句中添加了@Ext-谢谢您的帮助!