我想:csv
不使用sql Server导入导出向导将表从sql server数据库导出到逗号分隔文件
我想使用查询来做,因为我想在自动化中使用查询
可能吗?我搜索了该文件,却找不到一个好的答案
我想:csv
不使用sql Server导入导出向导将表从sql server数据库导出到逗号分隔文件
我想使用查询来做,因为我想在自动化中使用查询
可能吗?我搜索了该文件,却找不到一个好的答案
Answers:
一些想法:
1. Run a SELECT statement to filter your data
2. Click on the top-left corner to select all rows
3. Right-click to copy all the selected
4. Paste the copied content on Microsoft Excel
5. Save as CSV
例:
在命令提示符下,您可以运行查询并将其导出到文件中:
sqlcmd -S . -d DatabaseName -E -s, -W -Q "SELECT * FROM TableName" > C:\Test.csv
除非要将引号设置为分隔符,否则请勿仅使用-s引号分隔符,而不要使用-s'引号。
此处更多信息:ExcelSQLServer
笔记:
这种方法将在文件底部显示“受影响的行”信息,但是您可以通过在查询本身中使用“ SET NOCOUNT ON”来消除此信息。
您可以运行存储过程而不是实际查询(例如“ EXEC Database.dbo.StoredProcedure”)
例:
bcp "SELECT * FROM Database.dbo.Table" queryout C:\Test.csv -c -t',' -T -S .\SQLEXPRESS
重要的是用逗号分隔符-t','vs -t
此处有更多信息:bcp实用程序
笔记:
希望这可以帮助。
这是我找到的导出到Excel的选项(我相信可以修改为CSV)
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * FROM [SheetName$]') select * from SQLServerTable
SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', search for 'Ad Hoc Distributed Queries' in SQL Server Books Online.
您还可以使用以下Node.js模块轻松完成此操作:
https://www.npmjs.com/package/mssql-to-csv
var mssqlExport = require('mssql-to-csv')
// All config options supported by https://www.npmjs.com/package/mssql
var dbconfig = {
user: 'username',
password: 'pass',
server: 'servername',
database: 'dbname',
requestTimeout: 320000,
pool: {
max: 20,
min: 12,
idleTimeoutMillis: 30000
}
};
var options = {
ignoreList: ["sysdiagrams"], // tables to ignore
tables: [], // empty to export all the tables
outputDirectory: 'somedir',
log: true
};
mssqlExport(dbconfig, options).then(function(){
console.log("All done successfully!");
process.exit(0);
}).catch(function(err){
console.log(err.toString());
process.exit(-1);
});
从SQL Server Management Studio
右键单击要导出的表,然后选择“选择所有行”
右键单击结果窗口,然后选择“将结果另存为...”
我写了一个小工具来做到这一点。代码可以在github上找到。
要将一个(或多个)SQL查询的结果转储到一个(或多个)CSV文件中:
java -jar sql_dumper.jar /path/sql/files/ /path/out/ user pass jdbcString
干杯。
当出于某种原因想要所有表时?
您可以在SSMS中生成以下命令:
SELECT
CONCAT('sqlcmd -S ',
'Your(local?)SERVERhere'
,' -d',
'YourDB'
,' -E -s, -W -Q "SELECT * FROM ',
TABLE_NAME,
'" >',
TABLE_NAME,
'.csv') FROM INFORMATION_SCHEMA.TABLES
并再次获得这样的行
sqlcmd -S ... -d... -E -s, -W -Q "SELECT * FROM table1" >table1.csv
sqlcmd -S ... -d... -E -s, -W -Q "SELECT * FROM table2" >table2.csv
...
还可以选择使用更好的TAB作为分隔符,但它需要一个奇怪的Unicode字符-在CMD中使用Alt + 9,它的显示方式为○(Unicode CB25),但只能通过复制/粘贴到命令行来进行,而不是批量进行。
也许是死马了,但是不久前我试图做同样的事情,并且遇到了一个脚本来创建一个STP,该脚本试图做我想要的事情,但是它有一些怪癖需要注意。为了找到我要发布更新的脚本的位置,我遇到了这个线程,似乎是共享它的好地方。
此STP(在大多数情况下,我都不会相信,但找不到在其上找到的站点),将模式名称,表名称以及Y或N [包括或排除标题]作为输入参数并查询提供的表,以逗号分隔的带引号的csv格式输出每一行。
我已经对原始脚本进行了许多修复/更改,但是其中的骨骼来自OP,无论是谁。
这是脚本:
IF OBJECT_ID('get_csvFormat', 'P') IS NOT NULL
DROP PROCEDURE get_csvFormat
GO
CREATE PROCEDURE get_csvFormat(@schemaname VARCHAR(20), @tablename VARCHAR(30),@header char(1))
AS
BEGIN
IF ISNULL(@tablename, '') = ''
BEGIN
PRINT('NO TABLE NAME SUPPLIED, UNABLE TO CONTINUE')
RETURN
END
ELSE
BEGIN
DECLARE @cols VARCHAR(MAX), @sqlstrs VARCHAR(MAX), @heading VARCHAR(MAX), @schemaid int
--if no schemaname provided, default to dbo
IF ISNULL(@schemaname, '') = ''
SELECT @schemaname = 'dbo'
--if no header provided, default to Y
IF ISNULL(@header, '') = ''
SELECT @header = 'Y'
SELECT @schemaid = (SELECT schema_id FROM sys.schemas WHERE [name] = @schemaname)
SELECT
@cols = (
SELECT ' , CAST([', b.name + '] AS VARCHAR(50)) '
FROM sys.objects a
INNER JOIN sys.columns b ON a.object_id=b.object_id
WHERE a.name = @tablename AND a.schema_id = @schemaid
FOR XML PATH('')
),
@heading = (
SELECT ',"' + b.name + '"' FROM sys.objects a
INNER JOIN sys.columns b ON a.object_id=b.object_id
WHERE a.name= @tablename AND a.schema_id = @schemaid
FOR XML PATH('')
)
SET @tablename = @schemaname + '.' + @tablename
SET @heading = 'SELECT ''' + right(@heading,len(@heading)-1) + ''' AS CSV, 0 AS Sort' + CHAR(13)
SET @cols = '''"'',' + replace(right(@cols,len(@cols)-1),',', ',''","'',') + ',''"''' + CHAR(13)
IF @header = 'Y'
SET @sqlstrs = 'SELECT CSV FROM (' + CHAR(13) + @heading + ' UNION SELECT CONCAT(' + @cols + ') CSV, 1 AS Sort FROM ' + @tablename + CHAR(13) + ') X ORDER BY Sort, CSV ASC'
ELSE
SET @sqlstrs = 'SELECT CONCAT(' + @cols + ') CSV FROM ' + @tablename
IF @schemaid IS NOT NULL
EXEC(@sqlstrs)
ELSE
PRINT('SCHEMA DOES NOT EXIST')
END
END
GO
--------------------------------------
--EXEC get_csvFormat @schemaname='dbo', @tablename='TradeUnion', @header='Y'