【问题标题】:Bcp stored procedure not writing file to diskBcp 存储过程未将文件写入磁盘
【发布时间】:2012-07-28 03:29:32
【问题描述】:
下面当我在代码或 sql server management studio 2008 中执行存储过程时,它说它成功复制了行,但我不确定它为什么不将文件写入磁盘。有人可以帮助我吗,这几天我一直在努力解决这个问题。我已经启用命令外壳和一切。奇怪的是它可以从命令行运行,但是当我从存储过程执行时,它不会将文件写入磁盘,可以帮助我吗
USE [ColorDb]
GO
ALTER PROCEDURE [dbo].[prc_WriteTableToTextDelimitedFile]
(
@FilePath VarChar(256)
)
AS
BEGIN
DECLARE @sql varchar(8000)
SET @sql = 'bcp "SELECT * FROM ColorDb.dbo.ColorTable" queryout "'+ @FilePath +'" -c -t; -T -SXXXXXXXXXXXX'
Print @sql
exec master..xp_cmdshell @sql
END
RETURN
【问题讨论】:
标签:
sql-server
sql-server-2008
bcp
【解决方案1】:
我会打印出@sql 和@FilePath 的内容。
我刚刚通过 MS SQL Server 管理器调试器窗口运行了一些代码,您可以单步执行代码。我确实注意到您的引号似乎没有匹配,而且我看不到您将 @FilePath 初始化为任何内容的位置。查看您的最后一段,它似乎有一个无与伦比的双引号。
我没有使用任何双引号,而是从 MSSQL 服务器管理器下的查询生成器中的查询运行的。我从查询窗口中获得了文件输出、移动文件、连接文件以及其他内容。
就像这个简单的连接命令:
Exec master..xp_cmdshell 'type c:\bcp\sysobjects.txt >> c:\bcp\a.txt'
还有这个创建/输出命令:
SELECT @sql = 'bcp master..sysobjects out c:\bcp\sysobjects.txt -c -t\t -T -S' + @@servername
REPLACE( @sql, 'sysobjects.txt', @EmpRecordsFILENAME)
EXEC master..xp_cmdshell @sql
文件已创建,并使用这些简单的命令连接起来!