我写了一个查询来创建一个字符串并在值之间添加填充。然后将其作为文本文件导出,以便加载到遗留系统中。SQL Server添加填充到字符串
我已经使用表变量从table1中提取所有源数据,然后使用CAST运行查询以使用填充创建所需的字符串。
我的问题是;如果不使用表变量(或临时表),可以使用更少的步骤来实现这一点,而CAST是最好的方法吗?
不幸的是,使用填充字符串是创建合适的上传文件的唯一方法。
样本数据和查询:
CREATE TABLE dbo.table1(
[source1] [varchar](6),
[source2] [varchar](8),
[source3] [varchar](6),
[source4] [varchar](3),
[source5] [varchar](10),
[source6] [varchar](5),
[source7] [decimal](17, 2)
);
INSERT INTO dbo.table1 VALUES (999999,55566889,8964,'OPL',25648,'CR',12.35);
INSERT INTO dbo.table1 VALUES (222222,44422258,2548,'EWP',25698,'CR',10248.25);
INSERT INTO dbo.table1 VALUES (999999,33355589,3655,'SDO',75869,'DR',-897623.25);
INSERT INTO dbo.table1 VALUES (444444,11155987,5742,'SVI',25698,'CR',100023.36);
INSERT INTO dbo.table1 VALUES (555555,41555585,2586,'PLW',65879,'DR',-45.69);
Declare @TempTableVariable Table(
column1 nchar(15),
column2 nchar(6),
column3 nchar(3),
column4 nchar(10),
column5 nchar(6),
column6 nchar(25),
column7 nchar(17),
column8 nchar(17)
);
INSERT INTO @TempTableVariable
SELECT
source1 + source2 AS column1,
source3 AS column2,
source4 AS column3,
source5 AS column4,
source1 AS column5,
source6 AS column6,
CASE WHEN source7 > 0 THEN ABS(source7) ELSE NULL END AS column7,
CASE WHEN source7 < 0 THEN ABS(source7) ELSE NULL END AS column8
FROM dbo.table1
WHERE source1 = '999999';
SELECT
column1 AS SetID,
CAST(ISNULL(column2,'') AS nchar(4)) +
CAST(ISNULL(column3,'') AS nchar(6)) +
CAST(ISNULL(column4,'') AS nchar(14)) +
CAST(column5 AS nchar(7)) +
CAST(column1 AS nchar(15)) +
CAST(ISNULL(column7,'') AS nchar(17)) +
CAST(ISNULL(column8,'') AS nchar(17)) AS Input
FROM @TempTableVariable;
结果:
SETID|INPUT
99999955566889|8964OPL 25648 999999 99999955566889 12.35
99999933355589|3655SDO 75869 999999 99999933355589 897623.25
谢谢。
您可以将INSERT语句封装在CTE中,然后摆脱@TempTableVariable,请参阅下面的答案。 – NickyvV