0
我有一個存儲過程用於從SQL表中提取二進制數據以創建物理文件。我已經在使用從SQL備份恢復的相同結構的表上多次使用過它,並且它工作正常。列名無效:SQL Server 2008 R2
今天我想從恢復備份中的新表中提取一些二進制數據。我打開了我一直使用的存儲過程並設置了更改代碼。一旦我對更改感到滿意,我嘗試執行'ALTER'語句。不幸的是,儘管存在於「文檔」表中,但我使用的兩個列名都是「無效的」。
我已經閱讀了許多關於'無效列名'錯誤的其他線索,但其中大部分似乎都是輸入錯誤。我檢查了我的列名numurous次(智能感甚至讓我把'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
您是否嘗試過在列名稱周圍放置[]?這應該處理任何使用保留字的列名稱。 –
我已經嘗試過了,仍然沒有運氣。 我發現我從來沒有提過這部分導致錯誤: CAST(DOCUMENT_ID爲varchar(500))和 CAST(Document_Filename爲varchar(500)) – ChrisMurray
嘗試使用此代碼生成的SQL語句和SQL Management Studio中執行它。你確定你的BCP命令連接到正確的數據庫嗎? –