通常在设计表格时,您想知道表格中实际包含的内容。您是否需要支持不同数量的数据类型?你需要覆盖小数吗?一种可能的解决方案是这样的:
CREATE TABLE dbo.My_Table (
id INT NOT NULL,
data_type VARCHAR(10) NOT NULL,
string_value VARCHAR(100) NULL,
int_value INT NULL,
date_value DATETIME NULL,
CONSTRAINT CK_My_Table_data_type CHECK data_type IN ('int', 'string', 'datetime'),
CONSTRAINT PK_My_Table PRIMARY KEY CLUSTERED (id)
)
GO
然后,您可以使用数据类型来决定要选择或插入/更新的列。请记住,您在使用时可能会遇到问题:
SELECT
id,
CASE data_type
WHEN 'string' THEN string_value
WHEN 'int' THEN int_value
WHEN 'datetime' THEN date_value
ELSE NULL
END
SQL Server 要求所有数据类型都与要返回的列匹配。如果您一次只选择一个,它可能工作正常,但如果您想要选择数据集,那么您可能需要进行一些转换或只选择 data_type 值相等的行。不过,我还没有对所有场景进行测试,所以你应该尝试一下,看看哪些有效,哪些无效。
我还是要再说一遍,你应该再看看你的应用程序的设计。您当然可能需要这种功能,但是当我看到这种设计模式时,前端真正想要的是一个将在应用程序中显示的字符串。该字符串有时恰好看起来像一个数字或日期。如果您实际上要对数据执行数据类型特定的功能,那么可能需要一种不太“灵活”的设计,但在不了解您的所有要求的情况下我不能说。这只是我过去的经验。
编辑:看起来我打字太慢了,托尼打败了我。 :)