如何在sql函数中创建新表

时间:2016-09-30 06:12:38

标签: sql sql-server sql-server-2008 tsql

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

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

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

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

完成这些功能后,我运行以下查询。

Select * from TmpTable1

我需要输出

Value 
********
Value1
Value2

我需要这个。

但我收到了错误

Invalid use of a side-effecting operator 'SELECT INTO' within a function.

1 个答案:

答案 0 :(得分: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