我在Visual Studio中有一个SQL Server项目。我将所有的表定义保存在那里,每当我进行更改时,我选择publish,并且在比较模式之后,这些更改将自动应用于目标数据库。
这一切都适用于TABLE
s和VIEW
s,但是,当我改变内部查询/逻辑时,这不会更新FUNCTION
s和PROCEDURE
s。
是否有办法让FUNCTION
s在这种情况下自动更新?
包含函数的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;