使用 findstr 将空值替换为 sqlcmd 命令中的空字符串
Use findstr to replace null values with empty strings from sqlcmd command
我有一个从视图生成 csv 文件的 sqlcmd 命令。是否可以使用 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];
将return执行任务所需的一切:
- 视图名称
- 列名
- 列顺序
- 如果该列可以为空
因此,我们只需要构建提取 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 or STRING_AGG.
此外,您可以添加 WHERE
子句来过滤特定视图的查询。
将命令字符串中的 sql 单独更改为 select 字段并对它们执行 ISNULL
select * from view_Table
到
select ISNULL([FIELD_1],''''),ISNULL([FIELD_2],'''') from view_Table
在你调用字符串时
使用以下代码构建它并检查最终语句是否运行
DECLARE @Temp VARCHAR(MAX)
SET @Temp = 'SELECT ISNULL([FIELD_1],''''),ISNULL([FIELD_2],'''') FROM view_Table'
SELECT @Temp
我有一个从视图生成 csv 文件的 sqlcmd 命令。是否可以使用 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];
将return执行任务所需的一切:
- 视图名称
- 列名
- 列顺序
- 如果该列可以为空
因此,我们只需要构建提取 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 or STRING_AGG.
此外,您可以添加 WHERE
子句来过滤特定视图的查询。
将命令字符串中的 sql 单独更改为 select 字段并对它们执行 ISNULL
select * from view_Table
到
select ISNULL([FIELD_1],''''),ISNULL([FIELD_2],'''') from view_Table
在你调用字符串时
使用以下代码构建它并检查最终语句是否运行
DECLARE @Temp VARCHAR(MAX)
SET @Temp = 'SELECT ISNULL([FIELD_1],''''),ISNULL([FIELD_2],'''') FROM view_Table'
SELECT @Temp