【问题标题】:How to remove Nulls from Save As in SQL Server Management Studio如何在 SQL Server Management Studio 中从另存为中删除空值
【发布时间】:2016-05-16 17:45:35
【问题描述】:

我在存储过程中创建了一个类型为 table 的变量。在程序结束时,我选择表中的所有行并显示它们。当我右键单击标题并选择“另存为”时,它允许我将类型更改为所有文件并将文件另存为文本文件。这很好用,只是其中包含 NULLS 的列保存为 NULLS。我希望它用空格填充 NULL。

我一直在尝试找到一种使用存储过程创建文件的方法,但大多数情况表明要使用 SSIS,但我不知道如何将 SSIS 与作为表的变量一起使用,而不是使用实际的桌子。

如果我可以用空格替换空值或使用存储过程来做同样的事情,那就太好了。我不能使用制表符或逗号分隔,因为最终产品必须是一个平面文件,每列使用与列标题中声明的相同数量的字符。用空格填充。

感谢您提供的任何帮助。

干杯

附:我正在使用 SQL Server 2012 Management Studio

【问题讨论】:

  • 将空字符串的默认值添加到表定义中。
  • 我忘了提到我实际上将列默认为 ' ' 但存储过程的一部分会将列重置为 NULL

标签: sql sql-server stored-procedures ssms


【解决方案1】:

执行此操作的简单方法是将NULLs 转换为SELECT 语句中的空格。

SELECT COALESCE(yourcolumn, '')

COALESCE 子句放在每个包含NULLs 的列周围。

Using COALESCE article link

【讨论】:

    【解决方案2】:

    如果您在存储过程中做的最后一件事是 Select * From TempTable 那么您可以在 OleDb 源组件中使用该 SP。从表或视图更改为 Sql 命令并使用 Exec (sp_SomeName) 语法。这将创建一个管道,您可以将其连接到目标组件,例如平面文件。

    多年来,我在将结果另存为时遇到了很多问题...我只会将其用于非正式的“快速检查”文件,而不用于任何被视为“实时”或“生产”数据的内容。

    这是一个很好的博客,它还展示了如何使用参数。 http://geekswithblogs.net/stun/archive/2009/03/05/mapping-stored-procedure-parameters-in-ssis-ole-db-source-editor.aspx

    【讨论】:

    • 谢谢,我去看看!我没有意识到我可以将源更改为存储过程
    • 谢谢乔!我能够获得从 SSIS 创建的平面文件,并且我相信数据看起来像我想要的那样。 NULLS 被替换为空格;我将它设置为衣衫褴褛的固定宽度。现在我只需要弄清楚如何通过存储过程触发 SSIS 包并让它每次重命名文件。再次感谢您的帮助!
    • 我很高兴能帮上忙 :)。如果您使用的是 SSIS 目录,则很容易从 tsql 调用,包括 SP。如果没有,根据您的部署模型,有很多方法可以做到这一点。对于文件命名,它可以像连接管理器属性中的表达式一样简单,或者如果需要,您可以使用执行 sql 任务来获取值,使用 tsql 或脚本任务来编写自定义代码。关键是设置连接管理器连接字符串属性。
    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多