我已经创建了一个调查解决方案,它工作得很好。所有问题都有多个选项可供选择作为答案。我想要实现的是,当某个选项被保存为答案时,另一个表的一个或多个值将被更新。要更新的一个或多个表可能会因用户的回答而异,列的数据类型也可能会有所不同。
我正在考虑使用元数据表,在此示例中为AffectedData,其中包含有关表、值和数据类型的信息。像这样的伪代码:
CREATE TABLE AffectedData
ID int
TableName nvarchar(50) NOT NULL -- table to update
ColumnName nvarchar(50) NOT NULL -- the col to update
DataType nvarchar(50) NOT NULL -- the col data type
DataValue nvarchar(50) NOT NULL -- the value to update with
Operation int --insert or update
当插入答案时,触发器或过程可能会查询此表,并通过使用某些条件逻辑将DataValue转换为正确的数据类型,使用DataType作为提示,然后插入或更新到TableName中指定的表。换句话说,我假设我必须使用动态 SQL,使用 sp_executesql 来执行语句。
这是可行的方法还是有其他明智的方法来实现这一目标?
我会说这是一个非常合理的解决方案。您可能会考虑添加一个“活动”标志或类似的东西,这样您就可以在不删除 AffectedData 表的情况下停用某些行。此外,您还需要确保您拥有的任何解决方案都考虑了元数据表中存在多个条目的可能性。通过在其上放置一个限制它们的主键,或者在创建动态 SQL 时使用循环或批处理解决方案。