Je souhaite: Exporter la table de la base de données SQL Server vers un fichier csv
délimité par des virgules sans utiliser l'assistant d'importation de SQL Server Export
Je veux le faire en utilisant une requête parce que je veux utiliser la requête en automatisation
C'est possible? J'ai cherché cela et je n'ai pas trouvé de bonne réponse
Quelques idées:
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
Exemple:
A partir de la commande Invite, vous pouvez exécuter la requête et l'exporter dans un fichier:
sqlcmd -S . -d DatabaseName -E -s',' -W -Q "SELECT * FROM TableName" > C:\Test.csv
Plus d'informations ici: ExcelSQLServer
Remarques:
Cette approche aura les informations "Lignes affectées" au bas du fichier, mais vous pouvez vous en débarrasser en utilisant "SET NOCOUNT ON" dans la requête elle-même.
Vous pouvez exécuter une procédure stockée à la place de la requête réelle (par exemple, "EXEC Database.dbo.StoredProcedure").
Exemple:
bcp "SELECT * FROM Database.dbo.Table" queryout C:\Test.csv -c -t',' -T -S .\SQLEXPRESS
Il est important de citer le séparateur de virgule sous la forme -t ',' vs just -t,
Plus d'informations ici: Utilitaire bcp
Remarques:
J'espère que cela t'aides.
Vous pouvez également utiliser le module Node.js suivant pour le faire facilement:
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);
});
Voici une option j'ai trouvé à exporter vers Excel (peut être modifié pour CSV je crois)
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * FROM [SheetName$]') select * from SQLServerTable
De SQL Server Management Studio
Faites un clic droit sur la table que vous voulez exporter et sélectionnez "Sélectionner toutes les lignes"
Faites un clic droit sur la fenêtre de résultats et sélectionnez "Enregistrer les résultats sous ..."
rsubmit;
options missing=0;
ods listing close;
ods csv file='\\FILE_PATH_and_Name_of_report.csv';
proc sql;
SELECT *
FROM `YOUR_FINAL_TABLE_NAME';
quit;
ods csv close;
endrsubmit;
J'ai écrit un petit outil qui fait justement cela. Le code est disponible sur github .
Pour transférer les résultats d'une (ou plusieurs) requête SQL dans un (ou plusieurs) fichier CSV:
Java -jar sql_dumper.jar /path/sql/files/ /path/out/ user pass jdbcString
À votre santé.
Cheval mort peut-être, mais il y a quelque temps, j'essayais de faire la même chose et je suis tombé sur un script pour créer un STP qui essayait de faire ce que je cherchais, mais il y avait quelques bizarreries qui nécessitaient un peu d'attention. Dans une tentative de localiser le script pour publier une mise à jour, je suis tombé sur ce fil et cela semblait être un bon endroit pour le partager.
This STP (pour lequel je ne prends généralement aucun crédit et je ne trouve pas le site sur lequel je l'ai trouvé) prend un nom de schéma, un nom de table et Y ou N [pour inclure ou exclure des en-têtes. ] en tant que paramètres d'entrée et interroge la table fournie, en générant chaque ligne au format csv séparé par des virgules.
J'ai apporté de nombreux correctifs/modifications au script d'origine, mais ses os proviennent de l'OP, quel qu'il soit.
Voici le script:
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'