【发布时间】:2020-12-01 13:33:59
【问题描述】:
我编写了一个程序,将每个 SQL 查询数据导出到带有标题的 csv 文件。 但我不知道如下所示的错误。
消息 512,第 16 级,状态 1,第 26 行 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或使用子查询时,这是不允许的 作为表达。 消息 512,第 16 层,状态 1,第 27 行 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或使用子查询时,这是不允许的 作为表达式。
这里是我的示例数据库
这里有我的代码
DECLARE @SQLCmd varchar(max)
DECLARE @FilePathCmd varchar(max)
DECLARE @ExportCmd varchar(max)
SET @SQLCmd=(SELECT CommandText from TestDB.dbo.CommandExportData)
SET @FilePathCmd=(SELECT FilePath from TestDB.dbo.CommandExportData)
SELECT @ExportCmd='bcp "'+@SQLCmd+'" queryout "'+@FilePathCmd+'" -c -t, -T -S' + @@servername
print(@ExportCmd)
exec master..xp_cmdshell @ExportCmd
【问题讨论】:
-
没有看到代码,确实没有足够的信息来帮助解决这个问题。也就是说,错误似乎很明显。
-
@GordonLinoff 完成代码
-
什么令人困惑?
CommandExportData不止一行。 -
由于SQL只能读取第一行数据,无法继续执行第二行数据
-
这是您需要光标的极少数情况之一,如果这种方法应该被认为是一种好的方法。就我个人而言,我更喜欢为此编写客户端代码;它可以像使用 Task Scheduler 调度的 PowerShell 脚本一样简单。
标签: sql-server tsql bcp