【发布时间】:2019-10-03 14:44:44
【问题描述】:
我有 1 个表,每条记录的末尾都包含一个 KEY 和一个文件 ref。我还有另一个表,其中有很多记录,每条记录都包含一个 KEY。然后我通过 KEY 将两个表链接在一起,并希望根据文件 ref 导出数据。当我将它作为选择查询运行时,它工作正常......但是当我为了为每个文件 ref 生成一个文件而运行它时,它会失败,并在标题中出现错误,前面有 'SQLState = S1000, NativeError = 0' 行。我可以访问该目录,并且正在服务器上运行代码。任何指导将不胜感激。
DECLARE @File_number INT
DECLARE @SQL VARCHAR(8000)
DECLARE file_num CURSOR READ_ONLY FAST_FORWARD LOCAL FOR
SELECT DISTINCT File_number FROM map_sequence_tranid ORDER BY 1
OPEN file_num
FETCH NEXT FROM file_num INTO @File_number
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @SQL = 'bcp "SELECT b.File_number, a.[Field1], b.[Field2] from Table1 a, Table2 b where a.[Key]=b.[key] and b.File_number=' + CAST(@File_number as varchar(10)) + ' order by a.[key]" queryout ''E:\Path\file' + CAST(@File_number AS VARCHAR(10)) + '.txt'' -c -T -t'','' -S ' + @@SERVERNAME
EXEC master..xp_cmdshell @SQL
FETCH NEXT FROM file_num INTO @File_number
END
CLOSE file_num
DEALLOCATE file_num
【问题讨论】:
-
可能还有其他问题,但我在下面提供了一个答案,这可能是发生了什么。重要的一点是,您应该避免使用 XP_CMDSHELL。当命令被允许时,它会带来严重的安全风险。它应该在 SQL Server 上被禁用。
标签: sql-server tsql bcp