我认为将视图中的数据从SQL Server 2005导出到固定宽度的文本文件是一项非常简单的任务。但精灵很痛苦。格式不正确。有谁知道如何处理它?或者更好的方法吗?
答案 0 :(得分:5)
将bcp与queryout选项一起使用 http://msdn.microsoft.com/en-us/library/ms162802(SQL.90).aspx
bcp "SELECT * FROM AdventureWorks.Person.Contact" queryout Contacts.txt -c -T
如果需要固定宽度输出
,请使用格式文件http://weblogs.sqlteam.com/brettk/archive/2006/07/06/10504.aspx
我刚尝试在AdventureWorks中导出,Fixed Width也给了我很多问题(与列分隔符相比) 我不得不忽略GUID列,不包括第一行中的列名等。最后导出的Sales.Customer表
如果没有BCP,您可能需要查看SSIS或SQLCMD
答案 1 :(得分:1)
一种选择是使用OpenDataSource将行写入文本文件。这要求文本文件已经存在,但相对容易。
这篇文章(为了披露,我写了它,它专注于阅读,但也涉及写作)解释了使用OpenDataSource从文本文件中读取和写入的基础知识。 :http://www.sqlservercentral.com/articles/OpenDataSource/61552/
答案 2 :(得分:0)
如果向导的格式不符合您的需求,您将需要开发自己的SSIS包。你确定你真的需要一个固定宽度的文件吗?分隔文件可能更容易正确,因为它们更常见。
答案 3 :(得分:0)
我发现SQL2005 / SSIS只是简单易行,看似简单的任务。事情总是比我们应该长5倍。我知道我并不孤单。
BCP应该有效。
不知道sqlcmd - 似乎它没有固定宽度,除非你在sql语句中做了填充 - 这也很痛苦。
usage: Sqlcmd [-U login id] [-P password]
[-S server] [-H hostname] [-E trusted connection]
[-d use database name] [-l login timeout] [-t query timeout]
[-h headers] [-s colseparator] [-w screen width]
[-a packetsize] [-e echo input] [-I Enable Quoted Identifiers]
[-c cmdend] [-L[c] list servers[clean output]]
[-q "cmdline query"] [-Q "cmdline query" and exit]
[-m errorlevel] [-V severitylevel] [-W remove trailing spaces]
[-u unicode output] [-r[0|1] msgs to stderr]
[-i inputfile] [-o outputfile] [-z new password]
[-f <codepage> | i:<codepage>[,o:<codepage>]] [-Z new password and exit]
[-k[1|2] remove[replace] control characters]
[-y variable length type display width]
[-Y fixed length type display width]
[-p[1] print statistics[colon format]]
[-R use client regional setting]
[-b On error batch abort]
[-v var = "value"...] [-A dedicated admin connection]
[-X[1] disable commands, startup script, enviroment variables [and exit]]
[-x disable variable substitution]
[-? show syntax summary]