SQL Server从凌乱的C#字符串数组中提取值

时间:2015-06-15 11:52:21

标签: sql sql-server-2008

我需要采用这种String并创建一个每行一个值的新表。该字符串来自C#数组,其值基本上以逗号分隔,但字符串数组包含随机注释(例如//AB

{
//AB               "AB:ABLOC", "AB:ABCOM", "AB:ABSTD_DC", "AB:CMTRT"              //VAF               "VAF:VALAT", "VAF:FCSTATSP", "VAF:STATSP"
}

这是所需的输出表:

 **Column:**    
        AB:ABLOC
        AB:ABCOM
        .
        .
        .
        VAF:STATSP

我无权创建存储过程,表等,我只是在客户端(SQL Server)上运行我的SQL。 有什么明智的方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

如果我了解您的需要 - 使用ABVAF名称以及某些列创建表格,我可以建议您运行此查询的解决方案:

DECLARE @ColSptr varchar(3) = '//';
DECLARE @Sql varchar(max) = '';
WITH CTE(strTemp) AS(
    SELECT SUBSTRING(@str, CHARINDEX(@ColSptr, @str, 1) + LEN(@ColSptr), LEN(@str))
    UNION ALL
    SELECT SUBSTRING(strTemp, CHARINDEX(@ColSptr, strTemp, 1) + LEN(@ColSptr), LEN(strTemp))
    FROM CTE
    WHERE CHARINDEX(@ColSptr, strTemp, 1) > 0
), colData AS (
SELECT 
    RTRIM(LTRIM(LEFT(strTemp, CHARINDEX(' ', strTemp + ' ', 1)))) AS TableName,
    RTRIM(LTRIM(SUBSTRING(strTemp + @ColSptr, CHARINDEX(' ', strTemp + ' ', 1), CHARINDEX(@ColSptr, strTemp + @ColSptr, 1) - CHARINDEX(' ', strTemp + ' ', 1)))) AS ColumnNames
FROM 
    CTE
), finalColData AS (
SELECT
    TableName,
    REPLACE(REPLACE(ColumnNames, TableName + ':', ''), '"', '') AS ColumnNames
FROM
    colData
)
SELECT
    @sql = @sql + CASE WHEN @Sql <> '' THEN CHAR(13) + CHAR(10) ELSE '' END + 
        'CREATE TABLE ' + TableName + '(' + 
        '[' +REPLACE(ColumnNames , ', ', '] [varchar](10), [')  + '] [varchar](10)) ON [PRIMARY]'
FROM
    finalColData;
EXEC(@sql);