如何在sql函数中创建新表

Mel*_*ine 3 sql t-sql sql-server sql-server-2008

我创建了一个函数,该函数返回如下表格值

CREATE FUNCTION dbo.splitText(@strArgs VARCHAR(4000))
    RETURNS @tab TABLE
    (
        [Key] VARCHAR(255) NOT NULL,
        Value VARCHAR(4000) NOT NULL
    )
    AS
    BEGIN

INSERT INTO @tab VALUES('Key1', 'Value1')
INSERT INTO @tab VALUES('Key2', 'Value2')

RETURN
END
GO

OUtput:
Key Value
*************
Key1    Value1
Key2    Value2
Run Code Online (Sandbox Code Playgroud)

我需要的第二个功能是从上面的函数返回表值.

CREATE FUNCTION dbo.TableValuedParameterExample11()
RETURNS  @TmpTable1  table (Value VARCHAR(4000) NOT NULL) 
AS
BEGIN
 DECLARE @StateDescp VARCHAR(250)
 Select * into TmpTable1  from (Select value from dbo.Splittext('Test'))  aa

 RETURN  
END
GO
Run Code Online (Sandbox Code Playgroud)

完成功能后,我运行以下查询.

Select * from TmpTable1.

我需要输出

Value 
********
Value1
Value2
Run Code Online (Sandbox Code Playgroud)

我需要这个.

但我得到了错误

Invalid use of a side-effecting operator 'SELECT INTO' within a function.
Run Code Online (Sandbox Code Playgroud)

Ted*_* G. 6

当你写作时,select * into [table]...你必须确定它[table]不存在.使用insert into [table] select ...来代替.另外,@当你处理变量或函数表时,你需要一个:

CREATE FUNCTION dbo.TableValuedParameterExample11()
RETURNS  @TmpTable1  table (Value VARCHAR(4000) NOT NULL) 
AS
BEGIN
 DECLARE @StateDescp VARCHAR(250)
 INSERT INTO
    @TmpTable1([Value])
 SELECT 
    value 
 FROM 
    dbo.SplitArgs('Test'))  aa

 RETURN  
END
GO
Run Code Online (Sandbox Code Playgroud)