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