[SQL] 어떻게 SQL Server의 저장 프로 시저에서 CSV 출력 파일을 생성합니다
SQL어떻게 SQL Server의 저장 프로 시저에서 CSV 출력 파일을 생성합니다
그것은 SQL Server의 저장 프로 시저에서 csv 파일을 생성 할 수 있습니까? 내가 저장 프로 시저를 만들어 내가 CSV로 어떤 결과를 저장하려면, 누군가 알고 어떻게 이것을 달성하기 위해 무엇입니까?
해결법
-
==============================
1.나는 BCP 명령을 사용할 수 있습니다 생각합니다. 또한이 명령에 새로운 오전하지만 난이 링크를 따라하고 나를 위해 일했다.
나는 BCP 명령을 사용할 수 있습니다 생각합니다. 또한이 명령에 새로운 오전하지만 난이 링크를 따라하고 나를 위해 일했다.
-
==============================
2.이 답변에 제안이 사용 OPENROWSET을 할 수 있습니다. Slogmeister Extrarodinare 대답을 재개시 :
이 답변에 제안이 사용 OPENROWSET을 할 수 있습니다. Slogmeister Extrarodinare 대답을 재개시 :
를 사용하여 T-SQL
INSERT INTO OPENROWSET ('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]') SELECT Field1, Field2, Field3 FROM DatabaseName
그러나,주의의 몇 가지가 있습니다 :
-
==============================
3.어떤 테이블 구조 출력 창에서 CSV 형식으로 지정된 테이블에서이 스크립트는 수출 행을. 희망이 스크립트는 당신을 위해 도움이 될 것입니다 -
어떤 테이블 구조 출력 창에서 CSV 형식으로 지정된 테이블에서이 스크립트는 수출 행을. 희망이 스크립트는 당신을 위해 도움이 될 것입니다 -
DECLARE @TableName SYSNAME , @ObjectID INT DECLARE [tables] CURSOR READ_ONLY FAST_FORWARD LOCAL FOR SELECT '[' + s.name + '].[' + t.name + ']' , t.[object_id] FROM ( SELECT DISTINCT t.[schema_id] , t.[object_id] , t.name FROM sys.objects t WITH (NOWAIT) JOIN sys.partitions p WITH (NOWAIT) ON p.[object_id] = t.[object_id] WHERE p.[rows] > 0 AND t.[type] = 'U' ) t JOIN sys.schemas s WITH (NOWAIT) ON t.[schema_id] = s.[schema_id] WHERE t.name IN ('<your table name>') OPEN [tables] FETCH NEXT FROM [tables] INTO @TableName , @ObjectID DECLARE @SQLInsert NVARCHAR(MAX) , @SQLColumns NVARCHAR(MAX) , @SQLTinyColumns NVARCHAR(MAX) WHILE @@FETCH_STATUS = 0 BEGIN SELECT @SQLInsert = '' , @SQLColumns = '' , @SQLTinyColumns = '' ;WITH cols AS ( SELECT c.name , datetype = t.name , c.column_id FROM sys.columns c WITH (NOWAIT) JOIN sys.types t WITH (NOWAIT) ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id WHERE c.[object_id] = @ObjectID AND c.is_computed = 0 AND t.name NOT IN ('xml', 'geography', 'geometry', 'hierarchyid') ) SELECT @SQLTinyColumns = STUFF(( SELECT ', [' + c.name + ']' FROM cols c ORDER BY c.column_id FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 2, '') , @SQLColumns = STUFF((SELECT CHAR(13) + CASE WHEN c.datetype = 'uniqueidentifier' THEN ' + '';'' + ISNULL('''' + CAST([' + c.name + '] AS VARCHAR(MAX)) + '''', ''NULL'')' WHEN c.datetype IN ('nvarchar', 'varchar', 'nchar', 'char', 'varbinary', 'binary') THEN ' + '';'' + ISNULL('''' + CAST(REPLACE([' + c.name + '], '''', '''''''') AS NVARCHAR(MAX)) + '''', ''NULL'')' WHEN c.datetype = 'datetime' THEN ' + '';'' + ISNULL('''' + CONVERT(VARCHAR, [' + c.name + '], 120) + '''', ''NULL'')' ELSE ' + '';'' + ISNULL(CAST([' + c.name + '] AS NVARCHAR(MAX)), ''NULL'')' END FROM cols c ORDER BY c.column_id FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 10, 'CHAR(13) + '''' +') DECLARE @SQL NVARCHAR(MAX) = ' SET NOCOUNT ON; DECLARE @SQL NVARCHAR(MAX) = '''' , @x INT = 1 , @count INT = (SELECT COUNT(1) FROM ' + @TableName + ') IF EXISTS( SELECT 1 FROM tempdb.dbo.sysobjects WHERE ID = OBJECT_ID(''tempdb..#import'') ) DROP TABLE #import; SELECT ' + @SQLTinyColumns + ', ''RowNumber'' = ROW_NUMBER() OVER (ORDER BY ' + @SQLTinyColumns + ') INTO #import FROM ' + @TableName + ' WHILE @x < @count BEGIN SELECT @SQL = STUFF(( SELECT ' + @SQLColumns + ' + ''''' + ' FROM #import WHERE RowNumber BETWEEN @x AND @x + 9 FOR XML PATH, TYPE, ROOT).value(''.'', ''NVARCHAR(MAX)''), 1, 1, '''') PRINT(@SQL) SELECT @x = @x + 10 END' EXEC sys.sp_executesql @SQL FETCH NEXT FROM [tables] INTO @TableName , @ObjectID END CLOSE [tables] DEALLOCATE [tables]
출력 창에서이 (AdventureWorks.Person.Person) 같은 것을 얻을 것이다 :
1;EM;0;NULL;Ken;J;Sánchez;NULL;0;92C4279F-1207-48A3-8448-4636514EB7E2;2003-02-08 00:00:00 2;EM;0;NULL;Terri;Lee;Duffy;NULL;1;D8763459-8AA8-47CC-AFF7-C9079AF79033;2002-02-24 00:00:00 3;EM;0;NULL;Roberto;NULL;Tamburello;NULL;0;E1A2555E-0828-434B-A33B-6F38136A37DE;2001-12-05 00:00:00 4;EM;0;NULL;Rob;NULL;Walters;NULL;0;F2D7CE06-38B3-4357-805B-F4B6B71C01FF;2001-12-29 00:00:00 5;EM;0;Ms.;Gail;A;Erickson;NULL;0;F3A3F6B4-AE3B-430C-A754-9F2231BA6FEF;2002-01-30 00:00:00 6;EM;0;Mr.;Jossef;H;Goldberg;NULL;0;0DEA28FD-EFFE-482A-AFD3-B7E8F199D56F;2002-02-17 00:00:00
-
==============================
4.그것에 대해 정말 도움이 링크를 발견. 이를 위해 SQLCMD를 사용하여 저장 프로 시저와 함께이 문제를 해결하는 것보다 정말 쉽습니다
그것에 대해 정말 도움이 링크를 발견. 이를 위해 SQLCMD를 사용하여 저장 프로 시저와 함께이 문제를 해결하는 것보다 정말 쉽습니다
http://www.excel-sql-server.com/sql-server-export-to-excel-using-bcp-sqlcmd-csv.htm
-
==============================
5.나는 또한이 스레드를 찾는 경우에 다른 사람을 도움이 될 다른 도움이 게시물을 BCP 사용하고 몇 가지 발견
나는 또한이 스레드를 찾는 경우에 다른 사람을 도움이 될 다른 도움이 게시물을 BCP 사용하고 몇 가지 발견
당신의 @Sql 또는 xp_cmdshell을위한 @cmd 변수로 VARCHAR (MAX)를 사용하지 마십시오; 당신이 얻을 수 및 오류합니다
http://www.sqlservercentral.com/Forums/Topic1071530-338-1.aspx
사용 NULLIF는 (16 진수 편집기 나 메모장 ++에서 볼 수) 대신 NUL의 csv 파일에 대한 공백을 얻을 수 있습니다. 나는 BCP에 대한 SELECT 문에 그 사용
마이크로 소프트는 어떻게 BCP 수출 빈 문자열 대신에 NULL 문자를 만드는 방법?
-
==============================
6.그냥 마지막으로 일한이 작업을 수행 할 수있는 기본 방법을 대답 모든는 VARCHAR로 주조해야했다
그냥 마지막으로 일한이 작업을 수행 할 수있는 기본 방법을 대답 모든는 VARCHAR로 주조해야했다
ALTER PROCEDURE [clickpay].[sp_GetDocuments] @Submid bigint AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @raw_sql varchar(max) DECLARE @columnHeader VARCHAR(max) SELECT @columnHeader = COALESCE(@columnHeader+',' ,'')+ ''''+column_name +'''' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Documents' DECLARE @ColumnList VARCHAR(max) SELECT @ColumnList = COALESCE(@ColumnList+',' ,'')+ 'CAST('+column_name +' AS VARCHAR)' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Documents' SELECT @raw_sql = 'SELECT '+ @columnHeader +' UNION ALL SELECT ' + @ColumnList + ' FROM ' + 'Documents where Submid = ' + CAST(@Submid AS VARCHAR) -- Insert statements for procedure here exec(@raw_sql) END
-
==============================
7.나는이 시도하고 나를 위해 잘 작동한다 :
나는이 시도하고 나를 위해 잘 작동한다 :
sqlcmd -S servername -E -s~ -W -k1 -Q "sql query here" > "\\file_path\file_name.csv"
from https://stackoverflow.com/questions/16079666/how-to-produce-an-csv-output-file-from-stored-procedure-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 내장 기능은 각 단어의 첫 글자를 대문자로 (0) | 2020.06.13 |
---|---|
[SQL] 테이블이 비어있는 경우 INSERT를 실행? (0) | 2020.06.13 |
[SQL] SQL의 LIMIT 문은 얼마나 보편적인가? (0) | 2020.06.13 |
[SQL] PDO와 함께 LIKE에 대한 명명 된 매개 변수를 사용하여 (0) | 2020.06.13 |
[SQL] 팬더 쿼리 기능은 열 이름에 공백이 작동하지 않습니다 (0) | 2020.06.13 |