在 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 中的控件属性):

  1. 在XML、json文件中保存属性很好,但是在线修改比较麻烦。只需访问每台PC即可为每台PC申请新文件。
  2. 使用基于文件的方法。使其他连接的 PC 到 SQL 服务器实例必须有文件。 PC3 或 PC4 的文件可能重复或出现问题。
  3. 在连接的网络中检索文件不会像在任何 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.Int32System.Int64System.StringSystem.BooleanSystem.DateTime 等等。