我有这个功能:
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
答案 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