【问题标题】:SQL Insert Only First LetterSQL 仅插入第一个字母
【发布时间】:2018-01-09 07:29:01
【问题描述】:

我的 SQL 过程是

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

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

输出

    ID| RegCode | FirstName | MiddleName    | LastName  | Email | EmailVerified | MobileNo  | DateOFBirth   | StateID   | CityID | EmailVerificationCode |
------------------------------------------------------------------------------------------------------------------------------------------------------------
    1 | TM-1    |  t        |   s           |   m       | t     |   0      |    9       |   1           | 1         |1       |6D8F989A               |

这是什么问题,有什么问题请帮助我。

【问题讨论】:

  • 显示你的整个过程。

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


【解决方案1】:

当您省略长度时会出现此问题。在许多情况下,没有长度的字符串的默认值是 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() 和相关类型时始终包含长度。

【讨论】:

  • 我不知道是什么问题,但我删除了该程序并重新创建它工作
  • 存储处理器的速度能有多快?
【解决方案2】:

要获得第一个字符,您只需在下面:-

LEFT(colName, 1)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2022-11-04
    • 2012-09-13
    • 2021-03-11
    • 1970-01-01
    • 2013-06-09
    • 2021-05-11
    相关资源
    最近更新 更多