|
7 | 7 | --====================================================== |
8 | 8 | DROP PROCEDURE IF EXISTS [dbo].GetInsert_MongoShell |
9 | 9 | GO |
10 | | -CREATE PROCEDURE [dbo].GetInsert_MongoShell @TableSchema sysname = 'dbo', |
11 | | - @TableName sysname, |
| 10 | +CREATE PROCEDURE [dbo].GetInsert_MongoShell @TableName sysname, |
| 11 | + @TableSchema sysname = 'dbo', |
| 12 | + @Top INT = NULL, |
12 | 13 | @Where nvarchar(4000) = '', |
13 | | - @ExportPath nvarchar(255) = 'C:\Temp\' |
| 14 | + @ExportPath nvarchar(255) = NULL, |
| 15 | + @ExportOverrideServerInstance nvarchar(255) = NULL, |
| 16 | + @OverrideDestinationCollection nvarchar(255) = NULL |
14 | 17 | AS |
15 | 18 | BEGIN |
16 | 19 | SET NOCOUNT ON; |
17 | 20 |
|
18 | 21 | DECLARE @vCommand nvarchar(4000) |
| 22 | + DECLARE @vCollectionName nvarchar(255) = COALESCE(@OverrideDestinationCollection, @TableName) |
19 | 23 | DECLARE @vReturnCode INT |
20 | 24 |
|
21 | 25 | SET @ExportPath += '<table-name>-<yyyyMMdd-HHmmss>.js' |
@@ -43,41 +47,51 @@ BEGIN |
43 | 47 | SET @vCommand = ' |
44 | 48 | DECLARE @vJsonData nvarchar(max) |
45 | 49 | SELECT @vJsonData = ( |
46 | | - SELECT * |
| 50 | + SELECT TOP (@Top) * |
47 | 51 | FROM <schema>.<table> |
48 | 52 | <where> |
49 | 53 | FOR JSON AUTO |
50 | 54 | ) |
51 | | - INSERT INTO ##tJsonData SELECT ''db.createCollection("<table>");db.<table>.remove({});db.<table>.insert('' + @vJsonData + '')''' |
| 55 | + INSERT INTO ##tJsonData SELECT ''db.createCollection("<collection>");db.<collection>.remove({});db.<collection>.insert('' + @vJsonData + '')''' |
52 | 56 |
|
53 | 57 | SET @vCommand = REPLACE(@vCommand, '<schema>', @TableSchema) |
54 | 58 | SET @vCommand = REPLACE(@vCommand, '<table>', @TableName) |
| 59 | + SET @vCommand = REPLACE(@vCommand, '<collection>', @vCollectionName) |
55 | 60 | IF COALESCE(LTRIM(RTRIM(@Where)),'') <> '' |
56 | 61 | SET @Where = 'WHERE ' + @Where |
57 | 62 | ELSE |
58 | 63 | SET @Where = '' |
59 | 64 | SET @vCommand = REPLACE(@vCommand, '<where>', @Where) |
60 | 65 |
|
61 | | - EXEC sp_executesql @vCommand |
| 66 | + EXEC sp_executesql @vCommand, N'@Top INT', @Top |
62 | 67 |
|
63 | 68 | --Export to js file using sqlcmd |
64 | | - --SET @vCommand = 'sqlcmd -Q "SET NOCOUNT ON; SELECT * FROM ##tJsonData" -S ' + @@SERVERNAME + ' -E -h -1 -y 0 -o "' + @vExportPath + '"' |
65 | | - --EXEC @vReturnCode = xp_cmdshell @vCommand, no_output |
66 | | - |
67 | | - SET @vCommand = 'bcp "SELECT InsertScript FROM ##tJsonData" QUERYOUT "' + @vExportPath + '" -T -w -S "' + @@SERVERNAME+ '"' |
68 | | - RAISERROR(@vCommand,0,1) WITH NOWAIT |
69 | | - EXEC @vReturnCode = xp_cmdshell @vCommand, no_output |
70 | | - IF @vReturnCode <> 0 |
| 69 | + IF @ExportPath IS NOT NULL |
71 | 70 | BEGIN |
72 | | - RAISERROR('Exporting has been failed',16,1) WITH NOWAIT |
73 | | - RETURN -1 |
| 71 | + SET @vCommand = 'bcp "SELECT InsertScript FROM ##tJsonData" QUERYOUT "' + @vExportPath + '" -T -w -S "' + COALESCE(@ExportOverrideServerInstance, @@SERVERNAME) + '"' |
| 72 | + RAISERROR(@vCommand,0,1) WITH NOWAIT |
| 73 | + EXEC @vReturnCode = xp_cmdshell @vCommand, no_output |
| 74 | + IF @vReturnCode <> 0 |
| 75 | + BEGIN |
| 76 | + RAISERROR('Exporting has been failed',16,1) WITH NOWAIT |
| 77 | + RETURN -1 |
| 78 | + END |
| 79 | + END |
| 80 | + ELSE |
| 81 | + BEGIN |
| 82 | + SELECT InsertScript FROM ##tJsonData |
74 | 83 | END |
75 | 84 |
|
76 | 85 | RETURN |
77 | 86 | END |
78 | 87 | GO |
79 | 88 | /* |
80 | 89 | --This sample will get results of https://github.com/datnguye/SQL-Server/blob/master/web-call/ApiCovid19.sql to generate mongo shell script |
| 90 | +
|
| 91 | +EXEC GetInsert_MongoShell @TableName='ApiCovid19Route' |
| 92 | +EXEC GetInsert_MongoShell @TableName='ApiCovid19CountryDayOne', @Top = 10, @Where = 'CountryCode = ''vn''' |
| 93 | +EXEC GetInsert_MongoShell @TableName='ApiCovid19Route' |
| 94 | +
|
81 | 95 | EXEC GetInsert_MongoShell @TableName='ApiCovid19Route', @ExportPath = 'C:\Temp\' |
82 | 96 | EXEC GetInsert_MongoShell @TableName='ApiCovid19Countries', @ExportPath = 'C:\Temp\' |
83 | 97 | EXEC GetInsert_MongoShell @TableName='ApiCovid19CountryDayOne', @ExportPath = 'C:\Temp\' |
|
0 commit comments