SQL Serverのストアドプロシージャからcsvファイルを生成することは可能ですか?私は私のストアドプロシージャを作成し、CSVとしていくつかの結果を保存したい、誰かがこれを達成する方法を知っていますか?SQL Serverのストアドプロシージャから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
はそのために本当に役立つリンクを発見。このためSQLCMDを使用すると、ストアドプロシージャ、私はBCPコマンドを使用することが可能であると考え
http://www.excel-sql-server.com/sql-server-export-to-excel-using-bcp-sqlcmd-csv.htm
でこれを解決するよりも、本当に簡単です。私もこのコマンドに新しいですが、私はthis linkに続き、それは私のために働いた。
私はまた、bcpを使用して
xp_cmdshellをのためのあなたの@sql
や@cmd
変数としてVARCHAR(MAX)
を使用しないでくださいこのスレッドを見つけた場合に他の人に利益をもたらす夫婦他の有用な記事を見つけました。あなたが取得し、エラー
メッセージ214、レベル16、状態201、プロシージャxp_cmdshellを、ラインパラメータ 'varchar型' タイプの 'COMMAND_STRING' を期待し 1つの手順します。
http://www.sqlservercentral.com/Forums/Topic1071530-338-1.aspx
使用NULLIF
代わりNUL
(バイナリエディタ、またはメモ帳++で表示)のCSVファイルの空白を取得します。私はbcpのSELECT
文で
How to make Microsoft BCP export empty string instead of a NUL char?
あなたはこれらの は、このウェブサイト
https://www.excel-sql-server.com/sql-server-export-to-excel-using-bcp-sqlcmd-csv.htm
に与えられた手順に従ってくださいSQLからCSVを作成するには従って、保存するには、このリンクを使用することができます使用しましたいくつかの物理的な場所に。
https://www.codeproject.com/Questions/546777/HowplusToplusExportplusDataplusToplustheplus-csvpl
SQL ServerにWindowsエクスプローラを開いて、ユーザーがファイルの名前と場所を保存できるようにする方法はありますか? – tCoe
https://www.codeproject.com/Questions/546777/HowplusToplusExportplusDataplusToplustheplus-csvpl –
ただ、最終的に働いているこれを行うためのネイティブの方法に答えるために、すべてが私には、以下の回答に加えて、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
- 1. SQL ServerからCSVファイルを生成するストアドプロシージャを作成する方法
- 2. SQLストアドプロシージャをSQL Server 2000から呼び出す方法は?
- 3. ストアドプロシージャの出力をSQL Serverの変数に返す方法
- 4. .csvフラットファイルからストアドプロシージャ内のSQL Serverテーブルにデータをロードする方法
- 5. SQL Server Management Studioでストアドプロシージャを作成する方法
- 6. SQL Server 2008で別のストアドプロシージャ内でストアドプロシージャを作成する方法
- 7. SQL Server 1つのクエリから複数のCSVファイルを出力します。
- 8. SQL ServerからのキャリッジリターンでのXML出力の作成2014
- 9. HTMLファイルの.csvからデータを出力する方法は?
- 10. PHPからの出力パラメータ付きSQL Serverストアドプロシージャを呼び出す
- 11. Sql Server(2008)のストアドプロシージャにトレース/デバッグ出力を追加する方法
- 12. SQL Server:ストアドプロシージャから複数のテーブル出力を別のテーブルに挿入する
- 13. SQL Serverストアドプロシージャのxmlの作成
- 14. Server 2008のストアドプロシージャからビューを呼び出す方法は?
- 15. .csvファイルからデータを抽出するループを作成する方法
- 16. SQL Server 2005のストアドプロシージャのソースコードを出力する
- 17. SQL ServerのストアドプロシージャをExcelから呼び出す方法(Windows認証)
- 18. SQL Serverストアドプロシージャのクエリを使用して月間レポートテーブルを作成する方法?
- 19. SQL Server 2008のストアドプロシージャでntext型データを操作する方法
- 20. SQL Serverでテーブルを作成し、csvからデータを挿入
- 21. sslopenfreeから.pfxファイルを作成する方法3つのファイル出力?
- 22. SQL Serverから「.eml」ファイルを作成/生成するdbmail
- 23. WebSphere Application ServerからDB2 SQLダンプを作成する方法は?
- 24. SQL Serverのストアドプロシージャを生成する
- 25. SQL Serverシステムテーブルを作成する方法
- 26. mulesoftからSQL Serverストアドプロシージャに配列/データオブジェクトを渡す方法
- 27. SQL ServerからCSVへ高速データをエクスポートする方法
- 28. SQL Serverでテーブルを削除して作成する方法2016ストアドプロシージャ
- 29. CSVからXPTファイルを作成する方法R
- 30. Core Data(swift)からCSVファイルを作成する方法
としてキャストされるようになりました実際にプロシージャからcsvファイルを生成するかどうかを検討してください。最初の問題はアクセス許可です.SQL Serverサービスアカウントには出力フォルダへの書き込みが必要なため、問題が発生する可能性があります。 2番目の問題は、通常、データをフォーマット/プレゼンテーションから切り離すことです。プロシージャに結果を生成させてから、外部スクリプトを使用してcsvファイルを生成します。そうすることで、手続きの結果でさまざまなことを行うことができます.csvファイルを生成するのにハードコードされていません。 – Pondlife