SQL只插入第一封信

时间:2018-01-09 07:29:01

标签: sql stored-procedures sql-server-2012

我的SQL程序是

nvidia

当查询插入时,它们会按预期返回值,但我的条目应该仅在表格中输入我插入的第一个有价值的字母。

输出

create proc sp_tblAppRegistration
(
@Action varchar(100) = null,
@ID int  = null,
@RegCode varchar (100) = null,
@FirstName varchar(50) = null,
@MiddleName varchar (50)= null,
@LastName varchar (50)= null,
@Email varchar (100)= null,
@EmailVerified bit = null,
@MobileNo varchar (20) = null,
@DateOFBirth varchar (20)= null,
@StateID int  = null,
@CityID int  = null,
@EmailVerificationCode varchar (50)= null

)
WITH RECOMPILE
AS BEGIN

IF @Action = 'Register'
    BEGIN

         declare @newRegCode varchar(max) = 'TM-'+ cast((select count(*)+1 from tblRegistration) as varchar(10));  
         declare @VerificationCode varchar(max) = (select left(NEWID(),8));
         --//======================================

            insert into tblAppRegistration(RegCode,FirstName,MiddleName,LastName
            ,Email,EmailVerified,MobileNo,DateOFBirth,StateID,CityID,
            ,EmailVerificationCode)
            values
            (@newRegCode,@FirstName,@MiddleName,@LastName,@Email,'false',@MobileNo,@DateOFBirth,@StateID
            ,@CityID,@VerificationCode)

            select EmailVerificationCode, RegCode from  tblRegistration order by CreationDate desc
    END


 END

问题是什么问题请帮助我。

2 个答案:

答案 0 :(得分:0)

当您遗漏长度时会发生此问题。在许多情况下,没有长度的字符串的默认值是1。

因此,如果存储过程定义为:

create procedure x (
    @FirstName varchar,
    . . .
)
begin
. . .
end;

默认长度为“1”。您可以通过添加长度来轻松解决此问题:

create procedure x (
    @FirstName varchar(255),
    . . .
)
begin
. . .
end;

如果您使用declare

,情况也是如此
declare @FirstName varchar;

相当于:

declare @FirstName varchar(1);

道德?在SQL Server中,始终包括使用varchar()和相关类型时的长度。

答案 1 :(得分:0)

要获得第一个角色,您只需要执行以下操作: -

LEFT(colName, 1)

Insert into table(Fields,.....) values(Left(@newRegCode , 1), ....)