0

我有一个UDF,它采用逗号分隔的列表并将其转换为行所以输出

select * from fnDrugSplit('one,two,three',',')

将会

one
two
three

当我尝试将这些结果插入到表变量中时

declare @drugName1 table(drugName1 varchar(50),drugName2 varchar(50))
insert into @drugName1(drugName1,drugName2)
values(
         (select * from fnDrugSplit('one,two,three',',')
        ,(select * from fnDrugSplit('one,two,three',',')
      )

我明白Incorrect syntax near ')'了,最后一个括号封闭了该values块。该函数将是确定性的,我不知道为什么会出现此错误,因为

declare @drugName1 table(drugName1 varchar(50),drugName2 varchar(50))
insert into @drugName1(drugName1,drugName2)
values(
         (select 'one')
        ,(select 'two')
      )
select * from @drugName1

工作正常。我在这里想念什么?

函数中的第二个参数是行的分隔符。SQL Server 2008

4

1 回答 1

1

您的 udf 返回一个包含 3 行的表。您不能使用“VALUES”子句将 1 列的 3 行放入表中。“VALUES”子句需要标量,这就是“Select 'one'”和“Select 'two'”工作的原因。

你不需要“价值观”,你可以清楚地表达你的选择。

Insert into @drugName1
(drugName1, drugName2)
 select fn.ColName, fn.ColName
 from fnDrugSplit('one,two,three',',') fn

不确定如何将 3 个值放入 2 列,这在您的问题中并不清楚。另外,我不知道您的 UDF 的列名是什么,所以我假设 ColName。

于 2013-05-24T19:41:23.400 回答