我创建了一个函数,该函数返回表格值,如下所示
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.
答案 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