0

SQL テーブルからバイナリ データを抽出して物理ファイルを作成するために使用するストアド プロシージャがあります。SQL バックアップから復元された同じ構造を持つテーブルで数回使用しましたが、問題なく動作します。

今日、復元されたバックアップ内の新しいテーブルからバイナリ データを抽出したいと思いました。使用しているストアド プロシージャを開き、コードの変更に取り掛かりました。変更に満足したら、「ALTER」ステートメントを実行しようとしました。残念ながら、「ドキュメント」テーブルに存在するにもかかわらず、使用した列名は両方とも「無効」です。

「無効な列名」エラーに関する他の多くのスレッドを読みましたが、これらの大部分は入力エラーのようです。列名を何度もチェックしました (Intelli の意味では、'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 に答える