[英]Inserting concatenated values in T-SQL
Ok, this is what I am trying to achieve: 好的,这就是我要实现的目标:
My script below is supposed to gather values across three tables and insert them in TO TABLE B in sequence. 我下面的脚本应该收集三个表中的值,然后依次将它们插入TO TABLE B中。
There are two columns that are being affected in TABLE B the INDXLONG AND DDLINE. 表B中的INDXLONG和DDLINE有两列会受到影响。
In The DDLINE row I am attempting to concatenate values from different fields and to store them as one. 在DDLINE行中,我尝试连接来自不同字段的值并将它们存储为一个。
My code is below. 我的代码如下。 Please share any insights:
请分享任何见解:
Declare
@nRowCount int,
@Indxlong int,
@hdrLOCAL char(255),
@CR char(255),
@BLDCHKDT DATETIME,
@BLDCHTIME DATETIME,
@hdrline int,
@1strowline int,
@2ndrowline int,
@3rdrowline int,
@BWP char(255),
@CompAcc char(11),
@BankCode char(11),
@BranchNo char(11),
@PayDate datetime,
@Reference char(11),
@TotaAmt numeric(19,5)
@CoName char(11),
@BeneficiaryAcc char(11),
@BenBankBranchCode char(11),
@Salary numeric (19,5),
@BeneficiaryName char(23),
@TransRef char(23),
@outer_c int
SELECT @CompAcc =DDCOIDEN,
@BankCode =DDIMORIG,
@BranchNo =DDIMDEST,
@Reference =DDDESC10,
@CoName =DDIMORNM
FROM TABLE A
Declare ACH SCROLL CURSOR FOR
SELECT T762.DDINDNAM,
T762.DDTRANUM,
T762.DDACTNUM,
T762.DDAMTDLR,
T756.PAYDATE
FROM STATS.dbo.TABLE C T762
LEFT OUTER JOIN STATS.dbo.TABLE D T756 ON (
T762.INDXLONG = T756.INDXLONG
AND T756.INCLPYMT = 1
)
WHERE (T756.INCLPYMT = 1)
AND (T762.DDAMTDLR <> 0)
FOR READ ONLY;
OPEN ACH;
SET NOCOUNT ON;
FETCH FROM ACH INTO @BeneficiaryName,@BenBankBranchCode,@BeneficiaryAcc,@Salary,@paydate
WHILE @@FETCH_STATUS = 0
BEGIN
Select @TotaAmt =SUM(@Salary)
set @hdrline =1
set @1strowline =2
set @2ndrowline =3
set @3rdrowline =9
SELECT @hdrLOCAL = DDLINE FROM TABLE E WHERE INDXLONG =1
SELECT @CR = DDLINE FROM TABLE E WHERE INDXLONG =2
SELECT @BWP = DDLINE FROM TABLE E WHERE INDXLONG =3
BEGIN
INSERT INTO TABLE B (INDXLONG,DDLINE)
VALUES (1,@hdrLOCAL + ',' + @CR + ',' )
SELECT @@IDENTITY
END
BEGIN
INSERT INTO TABLE B (INDXLONG,DDLINE)
VALUES (2,@CompAcc + @BranchNo +','+ @BWP+ ',' + @PayDate +',' + @Reference + ','+@TotaAmt + ','+ @TransRef)
SELECT @@IDENTITY
END
BEGIN
INSERT INTO TABLE B (INDXLONG,DDLINE)
VALUES (3,@BeneficiaryAcc + ',' + @BenBankBranchCode +','+ @BeneficiaryAcc+ ',' + @Salary +',' + @Reference + ','+@TotaAmt + ','+ @TransRef)
SELECT @@IDENTITY
END
FETCH FROM ACH INTO @BeneficiaryName,@BenBankBranchCode,@BeneficiaryAcc,@Salary,@paydate
END
CLOSE ACH
DEALLOCATE ACH
SET NOCOUNT OFF;
This is the error: 这是错误:
Msg 8152, Level 16, State 14, Line 69
Msg 8152,第16级,状态14,第69行
String or binary data would be truncated.字符串或二进制数据将被截断。
The statement has been terminated.该语句已终止。
Msg 241, Level 16, State 1, Line 74消息241,第16层,州1,第74行
Conversion failed when converting date and/or time from character string.从字符串转换日期和/或时间时转换失败。
This is the result I am aiming for: 这是我想要的结果:
INDXLONG DDLINE ----------- ----------------------------------------------------------------------- 1 101001 029 1403200610A094101 AMEN BANK LOVE 2 123456 111 34567 PPDSALARYPAYT140131140117 11234567 3 63206623 0101962706200 0000062709000319614 ADAMS EVE
Cast your dates into varchars/nvarchars if you are going to concatenate them. 如果要连接日期,请将日期转换为varchars / nvarchars。 For examples, @PayDate should be casted like this: cast(PayDate as varchar(20)).
例如,@ PayDate应该这样铸造:cast(PayDate as varchar(20))。 Or if you need the date in a specific format, use Convert.
或者,如果您需要特定格式的日期,请使用“转换”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.