我有一个存储过程,用于从 SQL 表中提取二进制数据以创建物理文件。我已经在从 SQL 备份恢复的具有相同结构的表上使用了它几次,它工作正常。
今天我想从恢复备份中的新表中提取一些二进制数据。我打开了我一直在使用的存储过程并着手修改代码。一旦我对更改感到满意,我就会尝试执行“ALTER”语句。不幸的是,尽管存在于“文档”表中,但我使用的两个列名都是“无效的”。
我已经阅读了许多关于“无效列名”错误的其他线程,但其中大多数似乎是输入错误。我已经检查了我的列名无数次(智能甚至让我输入'Document.Document_ID'和'Document.Document_Filename',但它们仍然失败)。
有什么想法我哪里出错了吗?
资源:
USE [Example Live]
GO
/****** Object: StoredProcedure [dbo].[FileExport] Script Date: 10/18/2012 11:42:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Chris Murray
-- Create date: 18/10/2012
-- Description: Exports binary file data
-- =============================================
ALTER PROCEDURE [dbo].[FileExport]
-- Add the parameters for the stored procedure here
@OutputFilePath VARCHAR(500) = 'C:\Conv\Example\In\Afiles\'
AS
BEGIN
DECLARE @totrow int
DECLARE @currow int
DECLARE @result int
DECLARE @nsql nvarchar(4000)
DECLARE @sqlStatements table (ID int IDENTITY(1, 1), SqlStatement varchar(max))
INSERT
INTO @sqlStatements
SELECT 'BCP "SELECT Document_Data FROM [Example Live].[dbo].[Document] WHERE Document_ID = '''
+ CAST(Document_ID AS VARCHAR(500)) + '''" queryout ' + @OutputFilePath
+ CAST(Document_Filename AS VARCHAR(500)) + ' -S localhost\SQLEXPRESS2008 -T -f C:\Conv\Example\In\AFiles\Images.fmt'
FROM dbo.Photograph
SET @totrow = @@ROWCOUNT
SET @currow = 1
WHILE @totrow > 0 and @currow <= @totrow
BEGIN
SELECT @nsql = SqlStatement
FROM @sqlStatements
WHERE ID = @currow
EXEC @result = xp_cmdshell @nsql
SET @currow = @currow + 1
END
END