【问题标题】:Unique filename output from an SQL querySQL 查询的唯一文件名输出
【发布时间】:2017-11-21 17:36:02
【问题描述】:

我有以下代码,但现在需要在销售数据文件上有一个唯一的文件名(日期在末尾)​​

USE [KevinMayhewLive]
GO
/****** Object:  StoredProcedure [dbo].[toFileSalesData]    Script Date: 06/19/2017 13:36:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER procedure [dbo].[toFileSalesData]
as

--xp_cmdshell will shell out to the command line to run bcp
--the user account that runs this procedure should have file access to create and write files
--bcp does not append to files, all data will be overwritten each time this procedure runs

EXEC KevinMayhewLive..xp_cmdshell 'bcp "SELECT * FROM KevinMayhewLive.dbo.KM_CUSTOMER_DATA" queryout \\SERVER3\Docs\Emarsys_Sync\Customer_data\CUSTOMER_DATA.csv -c -t, -T -S'

EXEC KevinMayhewLive..xp_cmdshell 'bcp "SELECT * FROM KevinMayhewLive.dbo.KM_SALES_DATA" queryout \\SERVER3\Docs\Emarsys_Sync\Sales_Data\sales_items.csv -c -t, -T -S'

【问题讨论】:

  • 唯一文件名是什么意思?无论如何,您的查询有两个不同的文件名输出
  • 您好,欢迎来到 SO。目前尚不清楚您想从这个问题中得到什么。似乎您希望每次执行时都为 SalesData 文件指定一个唯一名称?对这个名字的结构有什么想法吗?在 ALTER 之前的那个 select 语句有什么意义???
  • 啊忘了删除那个(以前的一些坏建议)
  • 您真的在使用 SQL Server 2005 吗?我希望您能尽快升级到受支持的版本。
  • 要是这么简单就好了....

标签: sql sql-server csv stored-procedures sql-server-2005


【解决方案1】:

您没有描述“唯一”文件名的含义,但如果您想在文件名中包含时间戳(在大多数情况下会导致唯一性),则必须动态生成文件名。例如:

EXEC xp_cmdshell 'bcp "SELECT * FROM KevinMayhewLive.dbo.KM_CUSTOMER_DATA" queryout \\SERVER3\Docs\Emarsys_Sync\Customer_data\CUSTOMER_DATA_'+REPLACE(CONVERT(NVARCHAR(40), GETDATE(), 120),':','')+'.csv -c -t, -T -S'

【讨论】:

  • 需要在末尾加上日期,它每天运行,所以他们(我们的电子邮件人员)希望有销售数据的每日文件名,这样他们就不会感到困惑。
  • 我建议您也包括时间,以便您可以每天多次运行它(现在可能不需要,但总有一天有人会要求它。另外,您将每天对其进行多次测试)。我的代码包括时间。
  • 为什么用户数据库名在 xp_cmdshell 之前?
  • 这是非常古老的代码,可能是因为我们有多个数据库
  • @EdwardHeathcote 那么现在是修复它的好时机,因为您已经在进行更改了。
猜你喜欢
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 2021-09-12
相关资源
最近更新 更多