[英]Add new column that is a copy of another that strips diacritics (MSSQL)
[英]MSSQL - add new column in hierarchical table funcions
我有三个表函数:
第1步:
CREATE FUNCTION [dbo].[func1] ()
RETURNS TABLE AS
RETURN
(
SELECT
1 AS col1,
2 AS col2,
3 AS col3
)
GO
CREATE FUNCTION [dbo].[func2] ()
RETURNS TABLE AS
RETURN
(
SELECT * FROM func1()
)
GO
CREATE FUNCTION [dbo].[func3] ()
RETURNS TABLE AS
RETURN
(
SELECT
col1,
col2,
col3
FROM func2()
)
GO
当我在func1中添加名为col4的新列,并尝试在func3中添加相同名称的列时,问题就变成了。
第2步:
ALTER FUNCTION [dbo].[func1] ()
RETURNS TABLE AS
RETURN
(
SELECT
1 AS col1,
2 AS col2,
3 AS col3,
4 AS col4, --the new column
)
GO
func2保持不变,因为是“从func1中选择所有列”。
更改func3以从func1( col4 )添加同一列:
ALTER FUNCTION [dbo].[func3] ()
RETURNS TABLE AS
RETURN
(
SELECT
col1,
col2,
col3,
col4, -- the new column from func1
FROM func2()
)
GO
当我运行此最后一个查询时,我收到此错误消息:
消息207,级别16,状态1,过程func3,行11无效的列名称'col4'。
我的问题是:MSSQL在缓存中保存了一些引用? 我尝试重新启动SQL Server,但是此解决方案不起作用。
我发现的唯一方法是更改func2时保持不变,然后运行func3的alter。
是其他方法还是什么原因?
您需要刷新功能,以便sql重新编译它们
EXEC sys.sp_refreshsqlmodule 'func2';
否则,SQL Server将仅“查看”旧版本,而不会检测到func2中已有更改。
MSDN说:
对影响其定义的模块基础对象进行更改时,应运行sp_refreshsqlmodule。 否则,查询或调用模块时可能会产生意外结果。 MSDN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.