【发布时间】:2016-02-26 06:51:48
【问题描述】:
我正在从事一个项目,该项目涉及从一个表中检索数据,并解析某些字段中的一些信息并将它们放入另一个表的其他字段中。这涉及到一些 LEFT、SUBSTRING 和 RIGHT 函数。
我的问题是,当我运行查询时,变量会返回源表的最后一个值,并将其作为目标表字段中每一行的值。但是,其他字段为每一行返回不同的值,这是我们所期望的。
SQL 版本是 MSSQL Server 2012
这是代码(为简洁明了,表和字段名已更改)
USE [databaseName]
DECLARE @Year varchar(5);
DECLARE @Type varchar(2);
DECLARE @CaseType varchar(20);
DECLARE @ParsedHeader varchar(20);
SELECT @Year=SUBSTRING([tableSource].[Header],2,5)
FROM [tableSource];
SELECT @Type=LEFT([tableSource].[Header],2)
FROM [tableSource];
SELECT @CaseType=CASE(WHEN @Type='AA' THEN 'Type AA'
WHEN @Type='BB' THEN 'Type BB'
WHEN @Type='CC' THEN 'Type CC'
)
END;
SELECT @ParsedHeader =LEFT([tableSource].[OtherHeader],2)
+' '
+SUBSTRING([tableSource].[OtherHeader],3,7)
+'-'
RIGHT([tableSource].[OtherHeader],3)
FROM [tableSource];
INSERT INTO [tableTarget](
Name,
Foo,
Bar,
Year,
Type,
CaseType,
ParsedHeader)
SELECT(
Name,
Foo,
Bar,
@Year,
@Type,
@CaseType,
@ParsedHeader
)
FROM [tableSource];
运行时,我得到一组结果,其中 Year、Type、CaseType 和 ParsedHeader(可以为 NULL,最后一条记录为 NULL)字段总是从 sourceTable 中的最后一条记录中提取。 我显然在这里的逻辑中遗漏了一些东西。任何帮助表示赞赏。
【问题讨论】:
标签: sql sql-server-2012 sql-insert insert-into