-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathSaveJsonDataFromTable.sql
More file actions
74 lines (67 loc) · 2.54 KB
/
SaveJsonDataFromTable.sql
File metadata and controls
74 lines (67 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
CREATE OR ALTER PROCEDURE #SaveJsonDataFromTable
/**
Summary: >
This gets the JSON data from a table
Author: phil factor
Date: 26/10/2018
Examples: >
USE bigpubs
DECLARE @Json NVARCHAR(MAX)
EXECUTE #SaveJsonDataFromTable
@database='pubs',
@Schema ='dbo',
@table= 'authors',
@JSONData=@json OUTPUT
PRINT @Json
Returns: >
The JSON data
**/
(@database sysname = NULL, @Schema sysname = NULL, @table sysname = NULL,
@Tablespec sysname = NULL, @jsonData NVARCHAR(MAX) OUTPUT
)
AS
BEGIN
DECLARE @Data NVARCHAR(MAX);
IF Coalesce(@table, @Tablespec) IS NULL
OR Coalesce(@Schema, @Tablespec) IS NULL
RAISERROR('{"error":"must have the table details"}', 16, 1);
IF @table IS NULL SELECT @table = ParseName(@Tablespec, 1);
IF @Schema IS NULL SELECT @Schema = ParseName(@Tablespec, 2);
IF @database IS NULL SELECT @database = Coalesce(ParseName(@Tablespec, 3),Db_Name());
IF @table IS NULL OR @Schema IS NULL OR @database IS NULL
RAISERROR('{"error":"must have the table details"}', 16, 1);
DECLARE @SourceCode NVARCHAR(255) =
(
SELECT 'SELECT * FROM ' + QuoteName(@database) + '.'
+ QuoteName(@Schema) + '.' + QuoteName(@table)
);
DECLARE @params NVARCHAR(MAX) =
(
SELECT
String_Agg(
CASE WHEN user_type_id IN (128, 129, 130) THEN
'convert(nvarchar(100),' + name
+ ') as "' + name + '"'
--hierarchyid (128) geometry (130) and geography types (129) can be coerced.
WHEN user_type_id IN (35) THEN
'convert(varchar(max),' + name + ') as "'
+ name + '"'
WHEN user_type_id IN (99) THEN
'convert(nvarchar(max),' + name + ') as "'
+ name + '"'
WHEN user_type_id IN (34) THEN
'convert(varbinary(max),' + name
+ ') as "' + name + '"' ELSE
QuoteName(name) END, ', ' )
FROM sys.dm_exec_describe_first_result_set(@SourceCode, NULL, 1)
);
DECLARE @expression NVARCHAR(800) =
'
USE ' + @database + '
SELECT @TheData=(SELECT ' + @params + ' FROM ' + QuoteName(@database) + '.'
+ QuoteName(@Schema) + '.' + QuoteName(@table)
+ ' FOR JSON auto, INCLUDE_NULL_VALUES)';
EXECUTE sp_executesql @expression, N'@TheData nvarchar(max) output',
@TheData = @jsonData OUTPUT;
END;
GO