假设我有一个 inline-tvf 函数(假设名称:cfn_test),其定义如下:
从表A中选择*;
现在,在创建时,TableA 的结构是:
colA,colB(此时数据类型无关紧要)
让我们也添加一些数据:
| colA | colB |
| 1 | 2 |
该应用程序使用“SELECT * FROM cfn_test()”,并获得:
| colA | colB |
| 1 | 2 |
现在的问题:
tableA的结构发生了变化,在colA和colB.Data之间插入了一个colC:
| colA | colC | colB |
| 1 | 3 | 2 |
该应用程序现在得到:
| colA | colB |
| 1 | 3 |
如果我运行 SSMS 生成的 alter function 脚本,而不进行任何更改,它现在会返回正确的结果。
我的问题:a)是否有可能根据文本中“select *”的存在以某种方式检测哪些函数需要“更新”(我认为这是错误行为的罪魁祸首)
b)如果我设计一个循环遍历所有现有函数的脚本(使用 [INFORMATION_SCHEMA].[ROUTINES] ),我能否以某种方式自动生成 SSMS 生成并运行它的“alter function”脚本,以便所有函数都更新为当前的底层架构?