我需要采用这种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。 有什么明智的方法可以做到这一点吗?
答案 0 :(得分:0)
如果我了解您的需要 - 使用AB
和VAF
名称以及某些列创建表格,我可以建议您运行此查询的解决方案:
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);