0

我有一个存储过程,用于从 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
4

1 回答 1

0

感谢大家的想法。

这个问题是我自己造成的,而且是一个菜鸟的错误。我忽略了将 SELECT 语句指向正确的表..

于 2012-10-18T13:15:39.350 回答