![](/img/trans.png)
[英]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.