簡體   English   中英

如何在不使用存儲過程的情況下在表函數中返回值exec?

[英]How return value exec in table function without using a stored procedure?

我想要返回表功能,但錯誤是

在函數中無效使用副作用運算符“ INSERT EXEC”。

我的代碼:

CREATE FUNCTION [dbo].[Fn_GetTable] 
     (@ID AS NVARCHAR(MAX))
RETURNS 
      @Tbl TABLE (ID NVARCHAR(MAX)) 
AS
BEGIN
    DECLARE @str AS NVARCHAR(MAX)

    SET @str = 'SELECT * FROM support WHERE support IN ('+@ID+')'

    INSERT INTO @Tbl (ID)
        EXEC sp_executesql @str

    RETURN 
END

UDF中禁止包含sp_executesql過程。 https://docs.microsoft.com/en-us/sql/relational-databases/user-defined-functions/create-user-defined-functions-database-engine

我不明白您為什么需要動態。 嘗試

Create FUNCTION [dbo].[Fn_GetTable] (
 @ID as nvarchar(MAX)
)
RETURNS 
@Tbl TABLE (
 ID nvarchar(MAX)
) AS
BEGIN

    INSERT INTO  @Tbl (ID)
    select * 
    from support  
    where support in (@ID)

RETURN 
END

如果參數應該表示一個列表,則最好使用UDT。 https://docs.microsoft.com/zh-cn/sql/relational-databases/clr-integration-database-objects-user-defined-types/working-with-user-defined-types-in-sql-server 演示

CREATE TYPE dbo.UDT_IDS AS TABLE (ID  NVARCHAR(MAX)) ;

並將其用作參數

CREATE FUNCTION [dbo].[Fn_GetTable] (
 @IDS as dbo.UDT_IDS READONLY
)
RETURNS 
@Tbl TABLE (
 ID NVARCHAR(MAX)
) AS
BEGIN

    INSERT INTO  @Tbl (ID)
    SELECT support 
    FROM support  
    WHERE support in (SELECT ID FROM @IDS)

RETURN 
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM