使用UDF的结果集插入表变量

时间:2013-05-24 19:35:24

标签: sql sql-server tsql

我有一个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

1 个答案:

答案 0 :(得分:1)

你的udf返回一个包含3行的表。您不能使用“VALUES”子句将3行1列放入表中。 “VALUES”条款需要标量,这就是“选择'一个'”和“选择'两个'”的原因。

您不需要“VALUES”就可以清楚地表达您的选择。

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

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