如何更新SQL Server项目中的数据库函数



我在Visual Studio中有一个SQL Server项目。我将所有的表定义保存在那里,每当我进行更改时,我选择publish,并且在比较模式之后,这些更改将自动应用于目标数据库。

这一切都适用于TABLEs和VIEWs,但是,当我改变内部查询/逻辑时,这不会更新FUNCTIONs和PROCEDUREs。

是否有办法让FUNCTIONs在这种情况下自动更新?

包含函数的SQL文件如下所示

CREATE FUNCTION Function1()
RETURNS TABLE
AS
RETURN
(
*query*
)
GO
CREATE FUNCTION Function2()
RETURNS TABLE
AS
RETURN
(
*query*
)
GO

内联表函数可以在相同的视图条件下通过INSERT, UPDATE和DELETE来修改数据:

  • 修改只能针对函数
  • 的一个表
  • 在UDF的已发布列上不能应用转换
  • 一些操作符不能使用,如UNION, interect或EXCEPT

例子:

CREATE TABLE dee (A int);
CREATE TABLE dum (B int);
GO
CREATE FUNCTION F_DEE_DUM (@A_DEE INT, @B_DUM INT)
RETURNS TABLE AS
RETURN (SELECT *
FROM   dee FULL OUTER JOIN dum ON A = B
WHERE  @A_DEE IS NULL OR A = @A_DEE
AND   @B_DUM IS NULL OR B= @B_DUM)
GO
INSERT INTO dbo.F_DEE_DUM(NULL, NULL) (A) VALUES (0), (1);
INSERT INTO dbo.F_DEE_DUM(NULL, NULL) (B) VALUES (1), (2), (3);
UPDATE dbo.F_DEE_DUM(NULL, NULL) SET A = A + 1;
UPDATE dbo.F_DEE_DUM(NULL, NULL) SET B = B - 1;

最新更新