不能将表值函数的结果赋给表变量

时间:2015-05-19 13:39:49

标签: sql-server

我有这个功能:

Create function [dbo].[Split]
(
    @String nvarchar(max)
)
returns @SplittedValues table
(
    Id nvarchar(50) primary key
)

在存储过程中,我试图获取此函数调用的结果并将其插入到表变量中:

DECLARE @SplittedValues table
(
    [Id] nvarchar(50) primary key
);
INSERT INTO @SplittedValues([Id])
VALUES (SELECT * FROM [dbo].[Split](@Commands);

我得到了

  

" SELECT"

附近的语法不正确

数据库版本是SQl Server 2012

2 个答案:

答案 0 :(得分:1)

错误消息具有误导性。如果您真的想在INSERT .. VALUES()子句中使用(标量!)子选择,则必须添加其他括号:

INSERT INTO @SplittedValues([Id])
VALUES ((SELECT * FROM ...));

这将是“正确的”语法。但在你的情况下,无论如何这都没有意义。您希望将SELECT的结果整体复制到@SplittedValues表中。所以,试试这个:

INSERT INTO @SplittedValues([Id])
SELECT * FROM [dbo].[Split](@Commands);

答案 1 :(得分:0)

您的语法不正确。它应该是

INSERT INTO @SplittedValues([Id])
SELECT * FROM [dbo].[Split](@Commands)

当您在查询中写入一些有限值列表时,应使用语法insert into table_name (columns_list) values (values_list)

但是当你从一些select中获得的结果集中插入时,它会被insert into table_name (columns_list) select values from another_table