简体   繁体   English

在T-SQL中插入串联值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM