sql-server - 使用 findstr 将空值替换为 sqlcmd 命令中的空字符串
问题描述
我有一个 sqlcmd 命令,它从视图中生成一个 csv 文件。是否可以使用 findstr 命令将 NULL 值替换为空字符串?
这是我尝试过的。
sqlcmd -S . -d SAMPLEDB -U sa -P pass -s"|" -W -Q "SET NOCOUNT ON SET ANSI_WARNINGS OFF select * from view_Table" > Sample.csv -h -1 | findstr /v /c:"NULL"
解决方案
您可以使用系统管理视图轻松构建extraction SQL
每个视图。这个简单的查询:
SELECT v.[name]
,c.[name]
,c.[column_id]
,c.[is_nullable]
FROM sys.views V
INNER JOIN sys.columns C
ON V.[object_id] = C.[object_id];
将返回我们执行任务所需的一切:
- 视图名称
- 列名
- 列顺序
- 如果该列可以为空
因此,我们只需要构建提取 SQL 语句:
SELECT v.[name]
,'SELECT ' + DS.[definition] + ' FROM ' + v.[name]
FROM sys.views V
CROSS APPLY
(
SELECT STUFF
(
(
SELECT ',' + CASE WHEN c.[is_nullable] = 1 THEN 'ISNULL(' + c.[name] + ','''')' ELSE c.[name] END
FROM sys.columns C
WHERE V.[object_id] = C.[object_id]
ORDER BY c.[column_id]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1
,1
,''
)
) DS ([definition]);
根据您的 SQL 版本,您可以减少上面的代码 - 例如使用IIF或STRING_AGG。
此外,您可以添加WHERE
子句来过滤特定视图的查询。
推荐阅读
- react-native - React-native 安装所需的 CocoaPods 依赖项卡住
- react-native - 如何设置两个按钮粘在一起?
- sql - 如何根据同一张表中的另一列数据查看该列数据?
- anaconda - Will installation from source in different conda env lead to conflict?
- python - 为什么这个数据集实现会耗尽内存?
- swift - Swift, NWConnection UDP receive timeout?
- codeigniter-3 - 如果使用codeigniter超过5分钟如何删除自动日期
- asp.net-core - 如何在 .net Core 应用程序启动期间定义 ViewComponent 视图的位置?
- apache-spark - How to solve the problem of too much data in Spark?
- ruby-on-rails - Flash Danger 消息仅在登录视图中出现两次