0

我将 CSV 值存储在字符串中:

    StringBuilder CSValue = new StringBuilder();
    for (int i = 0; i < obj._contactNumbers.Count; i++)
    {
        CSValue.Append(obj._contactNumbers[i]);
        if (i != obj._contactNumbers.Count - 1)
        {
            CSValue.Append(",");
        }
    }

我已将它传递给存储过程(作为 CSValue.ToString()),现在我必须选择每个值并将其存储在单元格中。我应该如何分离这些值?

请帮帮我!

4

3 回答 3

2

由于您使用的是 SQL Server 2008,而不是 CSV,因此我实际上会将它们推送到 XML 文档中,如下所示:

<Values>
    <Value value="1" />
    <Value value="2" />
    <Value value="3" />
</Values>

然后,在存储过程中,我将使用以下 SQL 将每个值作为单独的行检索:

SELECT value.value('(@value)[1]', 'INT') as 'id' 
FROM @idList.nodes('/Values/Value') as T(value)

可以使用普通 SQL 查询连接将此结果与任何其他表连接,并获得所需的行为。

于 2012-10-15T16:47:03.137 回答
2

我定义了一个拆分函数。

有几个彻底的堆栈溢出线程与此有关,例如,在 T-SQL 中等效的拆分函数?

于 2012-10-15T16:48:34.673 回答
1

你可以试试这个

declare @Temp nvarchar(max), @c int, @a nvarchar(max)

declare @Temp_Table table (value nvarchar(max))

select @Temp = 'a,b,c,g,a'

select @c = CHARINDEX(',', @Temp)
while @c > 0
begin
    insert into @Temp_Table
    select LEFT(@Temp, @c - 1)

    select @Temp = right(@Temp, LEN(@Temp) - @c)
    select @c = CHARINDEX(',', @Temp)
end

select * from @Temp_Table

或者您可以编写一个表函数来执行此操作,如果您需要经常这样做

于 2012-10-15T16:45:39.800 回答