web-dev-qa-db-fra.com

exportez la table dans un fichier avec des en-têtes de colonnes (noms de colonnes) à l'aide de l'utilitaire bcp et de SQL Server 2008

J'ai vu un certain nombre de hacks pour essayer de faire en sorte que l'utilitaire bcp exporte les noms de colonne avec les données. Si je ne fais que vider un tableau dans un fichier texte, quelle est la méthode la plus simple pour que bcp ajoute les en-têtes de colonne?

Voici la commande bcp que j'utilise actuellement:

bcp myschema.dbo.myTableout myTable.csv /SmyServer01 /c /t, -T
33
JD Long

Le plus simple consiste à utiliser l'option queryout et à utiliser union all pour lier une liste de colonnes au contenu réel de la table.

    bcp "select 'col1', 'col2',... union all select * from myschema.dbo.myTableout" queryout myTable.csv /SmyServer01 /c /t, -T

Un exemple:

create table Question1355876 
(id int, name varchar(10), someinfo numeric)

insert into Question1355876 
values (1, 'a', 123.12)
     , (2, 'b', 456.78)
     , (3, 'c', 901.12)
     , (4, 'd', 353.76)

Cette requête renverra les informations avec les en-têtes comme première ligne. (Notez les transtypages des valeurs numériques)

select 'col1', 'col2', 'col3'
union all
select cast(id as varchar(10)), name, cast(someinfo as varchar(28))
from Question1355876

La commande bcp sera:

bcp "select 'col1', 'col2', 'col3' union all select cast(id as varchar(10)), name, cast(someinfo as varchar(28)) from Question1355876" queryout myTable.csv /SmyServer01 /c /t, -T
39
Filip De Vos

Cette méthode génère automatiquement les noms de colonne avec vos données de ligne en utilisant BCP .

Le script écrit un fichier pour les en-têtes de colonne (extrait de la table INFORMATION_SCHEMA.COLUMNS), puis ajoute un autre fichier avec les données de la table.

La sortie finale est combinée dans TableData.csv qui contient les en-têtes et les données de ligne. Il suffit de remplacer les variables d'environnement en haut pour spécifier le nom du serveur, de la base de données et de la table.

set BCP_EXPORT_SERVER=put_my_server_name_here
set BCP_EXPORT_DB=put_my_db_name_here
set BCP_EXPORT_TABLE=put_my_table_name_here

BCP "DECLARE @colnames VARCHAR(max);SELECT @colnames = COALESCE(@colnames + ',', '') + column_name from %BCP_EXPORT_DB%.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='%BCP_EXPORT_TABLE%'; select @colnames;" queryout HeadersOnly.csv -c -T -S%BCP_EXPORT_SERVER%

BCP %BCP_EXPORT_DB%.dbo.%BCP_EXPORT_TABLE% out TableDataWithoutHeaders.csv -c -t, -T -S%BCP_EXPORT_SERVER%

set BCP_EXPORT_SERVER=
set BCP_EXPORT_DB=
set BCP_EXPORT_TABLE=

copy /b HeadersOnly.csv+TableDataWithoutHeaders.csv TableData.csv

del HeadersOnly.csv
del TableDataWithoutHeaders.csv

Notez que si vous devez fournir des informations d'identification, remplacez l'option -T par -U mon_nom_utilisateur -P mon_mot_passe

Cette méthode présente l'avantage de toujours synchroniser les noms de colonne avec la table en utilisant INFORMATION_SCHEMA.COLUMNS. L'inconvénient est qu'il crée des fichiers temporaires. Microsoft devrait vraiment réparer l'utilitaire bcp pour supporter cela.

Cette solution utilise l'astuce de concaténation de lignes SQL de ici combinée à des idées bcp de ici

42
Dylan Hogg

SqlCmd est une bonne alternative, car il inclut des en-têtes, mais présente l'inconvénient d'ajouter un espace de remplissage autour des données pour une meilleure lisibilité. Vous pouvez combiner SqlCmd avec l'utilitaire GnuWin32 sed (édition de flux) pour nettoyer les résultats. Voici un exemple qui a fonctionné pour moi, bien que je ne puisse pas garantir que ce soit à l'épreuve des balles. 

Tout d'abord, exportez les données: 

sqlcmd -S Server -i C:\Temp\Query.sql -o C:\Temp\Results.txt -s"    "

Le -s" " est un caractère de tabulation entre guillemets. J'ai constaté que vous devez exécuter cette commande via un fichier de commandes, sinon l'invite de commande Windows traitera l'onglet comme une commande d'exécution automatique et substituera un nom de fichier à la place de l'onglet.

Si Query.sql contient:

SELECT name, object_id, type_desc, create_date
FROM MSDB.sys.views
WHERE name LIKE 'sysmail%'

alors vous verrez quelque chose comme ceci dans Results.txt

name                                          object_id   type_desc           create_date            
-------------------------------------------   ----------- ------------------- -----------------------
sysmail_allitems                               2001442204 VIEW                2012-07-20 17:38:27.820
sysmail_sentitems                              2017442261 VIEW                2012-07-20 17:38:27.837
sysmail_unsentitems                            2033442318 VIEW                2012-07-20 17:38:27.850
sysmail_faileditems                            2049442375 VIEW                2012-07-20 17:38:27.860
sysmail_mailattachments                        2097442546 VIEW                2012-07-20 17:38:27.933
sysmail_event_log                              2129442660 VIEW                2012-07-20 17:38:28.040

(6 rows affected)

Ensuite, analysez le texte en utilisant sed:

sed -r "s/ +\t/\t/g" C:\Temp\Results.txt | sed -r "s/\t +/\t/g" | sed -r "s/(^ +| +$)//g" | sed 2d | sed $d | sed "/^$/d" > C:\Temp\Results_New.txt

Notez que la commande 2d signifie supprimer la deuxième ligne, la commande $d veut supprimer la dernière ligne et "/^$/d" supprime les lignes vides.

Le fichier nettoyé ressemble à ceci (même si j'ai remplacé les onglets par | pour pouvoir les visualiser ici):

name|object_id|type_desc|create_date
sysmail_allitems|2001442204|VIEW|2012-07-20 17:38:27.820
sysmail_sentitems|2017442261|VIEW|2012-07-20 17:38:27.837
sysmail_unsentitems|2033442318|VIEW|2012-07-20 17:38:27.850
sysmail_faileditems|2049442375|VIEW|2012-07-20 17:38:27.860
sysmail_mailattachments|2097442546|VIEW|2012-07-20 17:38:27.933
sysmail_event_log|2129442660|VIEW|2012-07-20 17:38:28.040
8
Alchemistmatt

J'essayais de comprendre comment faire cela récemment et bien que j'aime la solution la plus populaire au sommet, cela ne fonctionnerait tout simplement pas pour moi car j'avais besoin que les noms soient les alias que j'ai entrés dans le script, j'ai donc utilisé des fichiers de traitement par lots. (avec l'aide d'un collègue) pour réaliser des noms de table personnalisés. 

Le fichier de commandes qui lance le bcp comporte une ligne au bas du script qui exécute un autre script qui fusionne un fichier de modèle avec les noms d'en-tête et le fichier qui vient d'être exporté avec bcp à l'aide du code ci-dessous. J'espère que cela aide quelqu'un d'autre qui était dans ma situation.

echo Add headers from template file to exported sql files....
Echo School 0031
copy e:\genin\templates\TEMPLATE_Courses.csv + e:\genin\0031\courses0031.csv e:\genin\finished\courses0031.csv /b
6
Mysteri0n

J'avais le même problème. J'avais besoin d'exporter l'en-tête de colonne à l'aide de l'utilitaire bcp du serveur SQL. De cette façon, j'ai exporté des "en-têtes" de table avec des données dans le même fichier exporté en une fois.

 DECLARE @table_name VARCHAR (50) = 'mytable' 
 DECLARE @columnHeader VARCHAR (8000) 
 SELECT @columnHeader = COALESCE (@ columnHeader + ',', '')) '' '' '+ nom_colonne + '' '' FROM Nal2013.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@nom_table
SELECT @raw_sql = 'bcp "SELECT" + @columnHeader +' UNION ALL SELECT * FROM ma table "queryout c:\datafile.csv -c , -T -S '+ @@ nomserveur 
 EXEC xp_cmdshell @raw_sql 

Bonne codage :)

3
Mridul Srivastava

Voici une procédure stockée assez simple qui fait aussi l'affaire.

    CREATE PROCEDURE GetBCPTable
    @table_name varchar(200)
AS
BEGIN
    DECLARE @raw_sql nvarchar(3000)

    DECLARE @columnHeader VARCHAR(8000)
    SELECT @columnHeader = COALESCE(@columnHeader+',' ,'')+ ''''+column_name +'''' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @table_name

    DECLARE @ColumnList VARCHAR(8000)
    SELECT @ColumnList = COALESCE(@ColumnList+',' ,'')+ 'CAST('+column_name +' AS VARCHAR)' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @table_name

    SELECT @raw_sql = 'SELECT '+ @columnHeader +' UNION ALL SELECT ' + @ColumnList + ' FROM ' + @table_name 
    --PRINT @raw_SQL
    EXECUTE sp_executesql  @raw_sql
END
GO
2
Dan Sullivan

Tout ce que je sais, BCP n’exporte que les données - je ne pense pas non plus qu’il soit possible de lui faire exporter la ligne d’en-tête avec les noms de colonne.

Une technique courante utilisée pour résoudre ce problème consiste à utiliser une vue de vos données réelles pour l'exportation, qui effectue essentiellement un UNION ALL sur deux instructions:

  • la première déclaration à redonner une ligne avec les en-têtes de colonne
  • les données réelles à exporter

puis utilisez bcp sur cette vue, au lieu de votre table de données sous-jacente directement.

Marc

2
marc_s

En plus de la solution de marc_s, vous pouvez également utiliser osql ou sqlcmd

Cela inclut les en-têtes et il peut agir comme bcp en utilisant -Q et -o. Cependant, ils ne supportent pas les fichiers de format comme bcp.

2
gbn

Les versions de chacun font les choses un peu différentes. C'est la version que j'ai développée au fil des ans. Cette version semble prendre en compte tous les problèmes que j'ai rencontrés. Renseignez simplement un ensemble de données dans une table, puis transmettez le nom de la table à cette procédure stockée.

J'appelle cette procédure stockée comme ceci:

EXEC    @return_value = *DB_You_Create_The_SP_In*.[dbo].[Export_CSVFile]
        @DB = N'*YourDB*',
        @TABLE_NAME = N'*YourTable*',
        @Dir = N'*YourOutputDirectory*',
        @File = N'*YourOutputFileName*'

Il y a aussi deux autres variables:

  • @NullBlanks - Cela prendra n'importe quel champ qui n'a pas de valeur et le Null. Ceci est utile car, dans le vrai sens de la spécification CSV , Chaque point de données doit être entouré de guillemets. Si vous Avez un grand ensemble de données, cela vous fera économiser pas mal d’espace N'ayant pas "" (deux guillemets) dans ces champs. Si vous ne trouvez pas cela utile, réglez-le sur 0.
  • @IncludeHeaders - J'ai une procédure stockée pour la sortie des fichiers CSV , Donc j'ai cet indicateur dans le cas où je ne veux pas d'en-têtes.

Cela va créer la procédure stockée:

CREATE PROCEDURE [dbo].[Export_CSVFile] 
(@DB varchar(128),@TABLE_NAME varchar(128), @Dir varchar(255), @File varchar(250),@NULLBLANKS bit=1,@IncludeHeader bit=1)
AS

DECLARE @CSVHeader varchar(max)=''  --CSV Header
, @CmdExc varchar(max)=''           --EXEC commands
, @SQL varchar(max)=''              --SQL Statements
, @COLUMN_NAME varchar(128)=''      --Column Names
, @DATA_TYPE varchar(15)=''         --Data Types

DECLARE @T table (COLUMN_NAME varchar(128),DATA_TYPE varchar(15))

--BEGIN Ensure Dir variable has a backslash as the final character
IF NOT RIGHT(@Dir,1) = '\' BEGIN SET @Dir=@Dir+'\' END
--END

--BEGIN Drop TEMP Table IF Exists
SET @SQL='IF (EXISTS (SELECT * FROM '+@DB+'.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ''TEMP_'+@TABLE_NAME+''')) BEGIN EXEC(''DROP TABLE ['+@DB+'].[dbo].[TEMP_'+@TABLE_NAME+']'') END'
EXEC(@SQL)
--END

SET @SQL='SELECT COLUMN_NAME,DATA_TYPE FROM '+@DB+'.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='''+@TABLE_NAME+''' ORDER BY ORDINAL_POSITION'
INSERT INTO @T
EXEC (@SQL)

SET @SQL=''
WHILE exists(SELECT * FROM @T)
    BEGIN
        SELECT top(1) @DATA_TYPE=DATA_TYPE,@COLUMN_NAME=COLUMN_NAME FROM @T
        IF @DATA_TYPE LIKE '%char%' OR @DATA_TYPE LIKE '%text'
            BEGIN 
            IF @NULLBLANKS = 1
                BEGIN
                    SET @SQL+='CASE PATINDEX(''%[0-9,a-z]%'','+@COLUMN_NAME+') WHEN ''0'' THEN NULL ELSE ''"''+RTRIM(LTRIM('+@COLUMN_NAME+'))+''"'' END AS ['+@COLUMN_NAME+'],' 
                END
            ELSE
                BEGIN
                    SET @SQL+='''"''+RTRIM(LTRIM('+@COLUMN_NAME+'))+''"'' AS ['+@COLUMN_NAME+'],' 
                END
            END
        ELSE
            BEGIN SET @SQL+=@COLUMN_NAME+',' END
            SET @CSVHeader+='"'+@COLUMN_NAME+'",'
            DELETE top(1) @T
    END 

IF LEN(@CSVHeader)>1 BEGIN SET @CSVHeader=RTRIM(LTRIM(LEFT(@CSVHeader,LEN(@CSVHeader)-1))) END

IF LEN(@SQL)>1 BEGIN SET @SQL= 'SELECT '+ LEFT(@SQL,LEN(@SQL)-1) + ' INTO ['+@DB+'].[dbo].[TEMP_'+@TABLE_NAME+'] FROM ['+@DB+'].[dbo].['+@TABLE_NAME+']' END
EXEC(@SQL)

IF @IncludeHeader=0 
    BEGIN
        --BEGIN Create Data file
        SET  @CmdExc ='BCP "'+@DB+'.dbo.TEMP_'+@TABLE_NAME+'" out "'+@Dir+'Data_'+@TABLE_NAME+'.csv" /c /t, -T' 
        EXEC master..xp_cmdshell @CmdExc
        --END
        SET  @CmdExc ='del '+@Dir+@File EXEC master..xp_cmdshell @CmdExc
        SET  @CmdExc ='ren '+@Dir+'Data_'+@TABLE_NAME+'.csv '+@File EXEC master..xp_cmdshell @CmdExc
    END 
else
    BEGIN

        --BEGIN Create Header and main file
        SET  @CmdExc ='echo '+@CSVHeader+'> '+@Dir+@File EXEC master..xp_cmdshell @CmdExc
        --END

        --BEGIN Create Data file
        SET  @CmdExc ='BCP "'+@DB+'.dbo.TEMP_'+@TABLE_NAME+'" out "'+@Dir+'Data_'+@TABLE_NAME+'.csv" /c /t, -T' 
        EXEC master..xp_cmdshell @CmdExc
        --END

        --BEGIN Merge Data File With Header File
        SET @CmdExc = 'TYPE '+@Dir+'Data_'+@TABLE_NAME+'.csv >> '+@Dir+@File EXEC master..xp_cmdshell @CmdExc
        --END

        --BEGIN Delete Data File
        SET @CmdExc = 'DEL /q '+@Dir+'Data_'+@TABLE_NAME+'.csv' EXEC master..xp_cmdshell @CmdExc
        --END
    END
--BEGIN Drop TEMP Table IF Exists
SET @SQL='IF (EXISTS (SELECT * FROM '+@DB+'.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ''TEMP_'+@TABLE_NAME+''')) BEGIN EXEC(''DROP TABLE ['+@DB+'].[dbo].[TEMP_'+@TABLE_NAME+']'') END'
EXEC(@SQL)
1
Matt Smith

La dernière version de sqlcmd ajoute l'option -w pour supprimer tout espace supplémentaire après la valeur du champ. Cependant, il NE met PAS de guillemets autour des chaînes, ce qui peut poser un problème sur CSV lors de l'importation d'une valeur de champ contenant une virgule.

1
Steven Buehler

J'ai réussi à atteindre cet objectif avec le code ci-dessous . Mettez le code ci-dessous dans la nouvelle fenêtre de requête SQL Server et essayez

CREATE TABLE tempDBTableDetails ( TableName VARCHAR(500), [RowCount] VARCHAR(500), TotalSpaceKB VARCHAR(500),
                UsedSpaceKB VARCHAR(500), UnusedSpaceKB VARCHAR(500) )

    -- STEP 1 :: 
    DECLARE @cmd VARCHAR(4000)

INSERT INTO tempDBTableDetails
SELECT 'TableName', 'RowCount', 'TotalSpaceKB', 'UsedSpaceKB', 'UnusedSpaceKB'
INSERT INTO tempDBTableDetails
SELECT  
    S.name +'.'+ T.name as TableName, 
    Convert(varchar,Cast(SUM(P.rows) as Money),1) as [RowCount],
    Convert(varchar,Cast(SUM(a.total_pages) * 8 as Money),1) AS TotalSpaceKB, 
    Convert(varchar,Cast(SUM(a.used_pages) * 8 as Money),1) AS UsedSpaceKB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM sys.tables T
INNER JOIN sys.partitions P ON P.OBJECT_ID = T.OBJECT_ID
INNER JOIN sys.schemas S ON T.schema_id = S.schema_id
INNER JOIN sys.allocation_units A ON p.partition_id = a.container_id
WHERE T.is_ms_shipped = 0 AND P.index_id IN (1,0)
GROUP BY S.name, T.name
ORDER BY SUM(P.rows) DESC

-- SELECT * FROM [FIINFRA-DB-SIT].dbo.tempDBTableDetails ORDER BY LEN([RowCount]) DESC

SET @cmd = 'bcp "SELECT * FROM [FIINFRA-DB-SIT].dbo.tempDBTableDetails ORDER BY LEN([RowCount]) DESC" queryout "D:\Milind\export.xls" -U sa -P dbowner -c'
    Exec xp_cmdshell @cmd 

--DECLARE @HeaderCmd VARCHAR(4000)
--SET @HeaderCmd = 'SELECT ''TableName'', ''RowCount'', ''TotalSpaceKB'', ''UsedSpaceKB'', ''UnusedSpaceKB'''
exec master..xp_cmdshell 'BCP "SELECT ''TableName'', ''RowCount'', ''TotalSpaceKB'', ''UsedSpaceKB'', ''UnusedSpaceKB''" queryout "d:\milind\header.xls" -U sa -P dbowner -c'
exec master..xp_cmdshell 'copy /b "d:\Milind\header.xls"+"d:\Milind\export.xls" "d:/Milind/result.xls"'

exec master..xp_cmdshell 'del "d:\Milind\header.xls"'
exec master..xp_cmdshell 'del "d:\Milind\export.xls"'

DROP TABLE tempDBTableDetails 
0
Milind Nikam

Vous devriez pouvoir résoudre ce problème avec une vue cte et un fichier de commandes contenant le code bcp. Commencez par créer la vue. Depuis, c’est relativement simple, je n’ai pas créé de table temporaire, normalement je le fais

CREATE VIEW [dbo].[vwxMySAMPLE_EXTRACT_COLUMNS]
  AS
    WITH MYBCP_CTE (COLUMN_NM, ORD_POS, TXT)
     AS
      ( SELECT  COLUMN_NAME
             , ORDINAL_POSITION
             , CAST(COLUMN_NAME AS VARCHAR(MAX))
        FROM [INFORMATION_SCHEMA].[COLUMNS]   
        WHERE TABLE_NAME = 'xMySAMPLE_EXTRACT_NEW'
        AND ORDINAL_POSITION = 1

        UNION ALL

        SELECT  V.COLUMN_NAME
              , V.ORDINAL_POSITION
              , CAST(C.TXT + '|' + V.COLUMN_NAME AS VARCHAR(MAX))
        FROM [INFORMATION_SCHEMA].[COLUMNS]  V INNER JOIN MYBCP_CTE C
        ON V.ORDINAL_POSITION = C.ORD_POS+1
        AND V.ORDINAL_POSITION > 1
        WHERE TABLE_NAME = 'xMySAMPLE_EXTRACT_NEW'
      )

      SELECT CC.TXT
      FROM MYBCP_CTE CC INNER JOIN ( SELECT MAX(ORD_POS) AS MX_CNT
                                     FROM MYBCP_CTE C
                                    ) SC
      ON CC.ORD_POS = SC.MX_CNT

Maintenant, créez le fichier de commandes. J'ai créé cela dans mon répertoire Temp mais je suis paresseux.

  cd\ 
  CD "C:\Program Files\Microsoft SQL Server\110\Tools\Binn"

  set buildhour=%time: =0%
  set buildDate=%DATE:~4,10%
  set backupfiledate=%buildDate:~6,4%%buildDate:~0,2%%buildDate:~3,2%%time:~0,2%%time:~3,2%%time:~6,2%

  echo %backupfiledate%
  pause

Le code ci-dessus crée simplement une date à ajouter à la fin de votre fichier. Ensuite, la première instruction bcp avec la vue sur le cte récursif afin de tout concaténer.

  bcp "SELECT *  FROM [dbo].[vwxMYSAMPLE_EXTRACT_COLUMNS] OPTION (MAXRECURSION 300)" queryout C:\Temp\Col_NM%backupfiledate%.txt -c -t"|" -S MYSERVERTOLOGINTO -T -q
  bcp "SELECT *  FROM [myDBName].[dbo].[vwxMYSAMPLE_EXTRACT_NEW] " queryout C:\Temp\3316_PHYSDATA_ALL%backupfiledate%.txt -c -t"|" -S MYSERVERTOLOGINTO -T -q

Maintenant, fusionnez les en utilisant la commande copy

  copy C:\Temp\Col_NM%backupfiledate%.txt  + C:\Temp\3316_PHYSDATA_ALL%backupfiledate%.txt  C:\Temp\3316_PHYSDATA_ALL%backupfiledate%.csv

Tous ensemble

0
Timothy Ultican

J'ai une version basée sur ce que j'ai vu précédemment. Cela m'a beaucoup aidé à créer des fichiers d'exportation au format CSV ou TXT. Je stocke une table dans une table ## Temp:

    IF OBJECT_ID('tempdb..##TmpExportFile') IS NOT NULL
DROP TABLE ##TmpExportFile;


DECLARE @columnHeader VARCHAR(8000)
DECLARE @raw_sql nvarchar(3000)

SELECT
              * INTO ##TmpExportFile
              ------ FROM THE TABLE RESULTS YOU WANT TO GET
              ------ COULD BE A TABLE OR A TEMP TABLE BASED ON INNER JOINS
              ------ ,ETC.

FROM TableName -- optional WHERE ....


DECLARE @table_name  VARCHAR(50) = '##TmpExportFile'
SELECT
              @columnHeader = COALESCE(@columnHeader + ',', '') + '''[' + c.name + ']''' + ' as ' + '' + c.name + ''
FROM tempdb.sys.columns c
INNER JOIN tempdb.sys.tables t
              ON c.object_id = t.object_id
WHERE t.NAME = @table_name

print @columnheader

                DECLARE @ColumnList VARCHAR(max)
SELECT
              @ColumnList = COALESCE(@ColumnList + ',', '') + 'CAST([' + c.name + '] AS CHAR(' + LTRIM(STR(max_length)) + '))'
FROM tempdb.sys.columns c
INNER JOIN tempdb.sys.tables t
              ON c.object_id = t.object_id
WHERE t.name = @table_name
print @ColumnList

--- CSV FORMAT                                       
SELECT
              @raw_sql = 'bcp "SELECT ' + @columnHeader + ' UNION all SELECT ' + @ColumnList + ' FROM ' + @table_name + ' " queryout \\networkdrive\networkfolder\datafile.csv -c -t, /S' + ' SQLserverName /T'
--PRINT @raw_sql
EXEC xp_cmdshell @raw_sql

  --- TXT FORMAT
       SET @raw_sql = 'bcp "SELECT ' + @columnHeader + ' UNION all SELECT ' + @ColumnList + ' FROM ' + @table_name + ' " queryout \\networkdrive\networkfolder\MISD\datafile.txt /c /S'+ ' SQLserverName /T'
       EXEC xp_cmdshell @raw_sql



DROP TABLE ##TmpExportFile
0
Robert Colon