[SQL Server] 自定義函數return table的兩種寫法

1. 直接返回表

CREATE FUNCTION [dbo].[fn_test](@input1 varchar(10), @input2 varchar(10))
RETURNS TABLE
AS
RETURN
(
  SELECT @input1 as col1,
  @input2  as clo2  
)
select * from [dbo].[fn_test](1,2)

Result
在這裏插入圖片描述

2. Multi-statement table-valued functions (MSTVF)

CREATE FUNCTION [dbo].[fn_test](@input1 varchar(10), @input2 varchar(10))
RETURNS @test_t TABLE (col1 varchar(10),col2 varchar(10))
AS
BEGIN
	INSERT INTO @test_t VALUES(@input1,@input2)
	INSERT INTO @test_t VALUES(1,2)
	INSERT INTO @test_t VALUES('A','B')

	RETURN
END

Result
在這裏插入圖片描述

ERROR

當把第一種函數改成第二種的時候,會報錯如下:
Cannot perform alter on ‘dbo.fn_test’ because it is an incompatible object type.

解決辦法就是: 刪除掉原先的函數重新創建。

PS: 函數中不可使用臨時表,這時候就可以用方法2.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章