我必须通过Go从MS-SQL数据库创建一个JSON。问题是某些数据库字段是在后端系统中动态创建的(而不是Go)。
可能有:
type Demotable struct{
Id int
Name string
Adress int
Z_somedynamicfield string
Z_anotherfield int
}
前缀为“Z_”的所有字段都是动态的,因此struct也可以是:
type Demotable struct{
Id int
Name string
Adress int
Z_completedifferent int
Z_notlikefirst string
Z_evenmorefields string
}
我还有一个帮助表,其中描述了每个“动态字段”:
| tableName | fieldName | fieldType |
+-----------+--------------------+-----------+
| Demotable | Z_somedynamicfield | string |
+-----------+--------------------+-----------+
| Demotable | Z_anotherfield | int |
...
理想情况下,我会使用帮助程序表中的infos动态“扩展”struct - 但我不知道如何甚至可能这样做?
答案 0 :(得分:0)
我建议首先通过准备好的声明查询表中的当前表:
SELECT * FROM [DatabaseName].INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'MyTable'
将查询结果存储在字符串切片中。完成后,创建一个包含string
个键和*interface{}
值的地图。
results := make(map[string](*interface{})
在迭代实际查询的结果时,您最终可以分配上一个查询的值来映射结果。
Kyle Banks提供了一个很好的解释,可以从this文章的查询结果中接收动态结果。
如果由于任何原因您需要实际指定结果的类型,reflect
package将在自动解析您需要的值类型方面提供很多帮助。