在 SQL 服务器 table 中保存 800 多个控件属性是一种好方法吗?联机共享控件属性
Is it good approach for saving 800+ control properties in SQL Server table? Online Sharing Control Properties
关于那个我搜索了很多次。实际上每个 SQL 服务器 table 的最大 NO 列是 1024。问题是 SQL 如果超过 655,服务器会阻止查看器(IDK 为什么他们这样做......)
一些文章谈到了这一点:
Is there a hard limit as to how many columns can be returned in C# SqlDataAdapter Fill?
The results viewer cannot execute a query with more than 655 columns in the project list
没有实际的解决方案或覆盖解决方案来使搜索后接受table...
实际上我需要保存到列的属性看起来像:
TreeMenu_OptionsView_ShowColumns bit
TreeMenu_OptionsView_ShowColumns_Default bit
TreeMenu_OptionsView_ShowFilterPanelMode nvarchar(50)
TreeMenu_OptionsView_ShowFilterPanelMode_Default nvarchar(50)
TreeMenu_OptionsView_ShowFirstLines bit
TreeMenu_OptionsView_ShowFirstLines_Default bit
++ more than 600 properties
我遇到的问题(特别是访问客户端 PC 中的控件属性):
- 在XML、json文件中保存属性很好,但是在线修改比较麻烦。只需访问每台PC即可为每台PC申请新文件。
- 使用基于文件的方法。使其他连接的 PC 到 SQL 服务器实例必须有文件。 PC3 或 PC4 的文件可能重复或出现问题。
- 在连接的网络中检索文件不会像在任何 PC 中的 SQL 服务器
Select
查询那样快
我得到的解决方案只能在短期内有效:将 SQL 服务器 table 分成 2 个 table;一种用于控件属性,一种用于控件外观
但可能几个月后需要添加新的属性(40 多个新选项),所以我们将 return 再次闭环...
如果您对此有意见,我将不胜感激。也许 SQL 服务器中有一些东西可能像缓存 tables (temp, etc) IDK
我只需要使用 SQL 服务器(欢迎使用其他方法)。
一目了然:我需要一个解决方案来创建类似缓存的东西 table 哪些列可以随时间增加
已编辑
在sql_variant
的问题中,这是一个低性能,并且不能使用LIKE
语句。并且值必须使用 CAST()
函数插入以获得我们想要的类型。使用 NVARCHAR(MAX)
更好,它可以容纳任何类型的值。
请参阅下面的 xanatos 答案。
我从未见过使用属性数量增长如此之多的列。如您所见,它变得很容易难以管理。
如果属性是用户连接的(可能是他们的设置)一个简单的 table like
(UserId, PropertyName, ValueAsNVarChar)
可能更好。
如果想深奥一点,SQL服务器支持sql_variant
可以包含任意值
如果属性是程序范围的,那么
(PropertyName, ValueAsNVarChar) is enough,
或
(PropertyName, ValueAsVariant)
最好有另一列具有预期的 .NET 数据类型:
(PropertyName, ValueAsNVarChar, DotNetDataType) is enough,
其中 DotNetDataType
可以是 System.Int32
、System.Int64
、System.String
、System.Boolean
、System.DateTime
等等。
关于那个我搜索了很多次。实际上每个 SQL 服务器 table 的最大 NO 列是 1024。问题是 SQL 如果超过 655,服务器会阻止查看器(IDK 为什么他们这样做......)
一些文章谈到了这一点:
Is there a hard limit as to how many columns can be returned in C# SqlDataAdapter Fill?
The results viewer cannot execute a query with more than 655 columns in the project list
没有实际的解决方案或覆盖解决方案来使搜索后接受table...
实际上我需要保存到列的属性看起来像:
TreeMenu_OptionsView_ShowColumns bit
TreeMenu_OptionsView_ShowColumns_Default bit
TreeMenu_OptionsView_ShowFilterPanelMode nvarchar(50)
TreeMenu_OptionsView_ShowFilterPanelMode_Default nvarchar(50)
TreeMenu_OptionsView_ShowFirstLines bit
TreeMenu_OptionsView_ShowFirstLines_Default bit
++ more than 600 properties
我遇到的问题(特别是访问客户端 PC 中的控件属性):
- 在XML、json文件中保存属性很好,但是在线修改比较麻烦。只需访问每台PC即可为每台PC申请新文件。
- 使用基于文件的方法。使其他连接的 PC 到 SQL 服务器实例必须有文件。 PC3 或 PC4 的文件可能重复或出现问题。
- 在连接的网络中检索文件不会像在任何 PC 中的 SQL 服务器
Select
查询那样快
我得到的解决方案只能在短期内有效:将 SQL 服务器 table 分成 2 个 table;一种用于控件属性,一种用于控件外观
但可能几个月后需要添加新的属性(40 多个新选项),所以我们将 return 再次闭环...
如果您对此有意见,我将不胜感激。也许 SQL 服务器中有一些东西可能像缓存 tables (temp, etc) IDK
我只需要使用 SQL 服务器(欢迎使用其他方法)。
一目了然:我需要一个解决方案来创建类似缓存的东西 table 哪些列可以随时间增加
已编辑
在sql_variant
的问题中,这是一个低性能,并且不能使用LIKE
语句。并且值必须使用 CAST()
函数插入以获得我们想要的类型。使用 NVARCHAR(MAX)
更好,它可以容纳任何类型的值。
请参阅下面的 xanatos 答案。
我从未见过使用属性数量增长如此之多的列。如您所见,它变得很容易难以管理。
如果属性是用户连接的(可能是他们的设置)一个简单的 table like
(UserId, PropertyName, ValueAsNVarChar)
可能更好。
如果想深奥一点,SQL服务器支持sql_variant
可以包含任意值
如果属性是程序范围的,那么
(PropertyName, ValueAsNVarChar) is enough,
或
(PropertyName, ValueAsVariant)
最好有另一列具有预期的 .NET 数据类型:
(PropertyName, ValueAsNVarChar, DotNetDataType) is enough,
其中 DotNetDataType
可以是 System.Int32
、System.Int64
、System.String
、System.Boolean
、System.DateTime
等等。