sql - 为 BCP 创建 SQL 查询的字符串格式问题
问题描述
我想将一些静态数据用于新的 BCP 查询并将提取的数据导出为 CSV。静态数据是在之前运行一些 BCP 命令后生成的。
但是我一直面临着使用这些变量创建 SQL 查询并生成 SQL 命令的字符串格式问题。
我只想在 BCP 命令中使用以下查询:
select @version, @TotalRecords
我使用的 BCP 查询是:
DECLARE
@version varchar(10),
@HeaderCmd VARCHAR(500),
@StateCode varchar(2),
@v_Header_path varchar(255),
@TotalRecords int;
SET @StateCode = 'AL'
SET @version = 'ver4'
SET @TotalRecords = 20
SET @v_Header_path ='c:\csv\test\' + @StateCode + '_header.txt'
SELECT @HeaderCmd = 'bcp '
+'"select '+ @version+ '" '
+ ' queryout ' + @v_Header_path
+ ' -c -t, -T' ;
SELECT @HeaderCmd AS 'Command to execute';
EXECUTE master..xp_cmdshell @HeaderCmd;
上面的命令正在生成以下 sql 命令:
bcp "select ver4" queryout c:\csv\test\AL_header.txt -c -t, -T
并给出错误:
Error = [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Invalid column name 'ver4'.
我想将@version
和的值导出@TotalRecords
到 CSV 文件中。
但是我陷入了将 SQL 查询创建为字符串的字符串格式问题。
解决方案
为列命名,并在引号中输出值。使用连续的单引号将引号传递给字符串:
select @HeaderCmd =
'bcp ' +
'"select ''' + @stateCode + ''' as stateCode, ''' + @version + ''' as version, ' + convert(varchar(10), @totalRecords) + ' as totalRecords" ' +
' queryout ' + @v_Header_path +
' -c -t, -T' ;
这应该输出:
bcp "select 'AL' as stateCode, 'ver4' as version, 20 as totalRecords" queryout c:\csv\test\AL_header.txt -c -t, -T
推荐阅读
- java - java.lang.IndexOutOfBoundsException:索引:6,大小:6
- python - 在 JSON 中使用变量
- google-bigquery - 地形 0.12.5 | Bigquery 表资源不支持外部数据配置块
- promise - Dexie toArray() 承诺
- haskell - Haskell:了解函数的副作用
- javascript - 需要使用 javascript/jQuery 从购物车中添加和删除项目
- postgresql - Postgresql 如何提高大型连接表排序的性能?
- jenkins - 在 Jenkins 中运行的 csh 的 $#argv 错误
- php - 在 Mac OS X 上将 ldap 驱动程序加载到 MAMP 上
- mysql - Mysql优化日期过滤器