Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 注释行出错_Sql Server_Ssms - Fatal编程技术网

Sql server 注释行出错

Sql server 注释行出错,sql-server,ssms,Sql Server,Ssms,您好,我已经创建了一个存储过程,该存储过程链接到一个具有三个外键的表地址: -材料地址 -HomeAddressID -后腹腔镜 这是我创建的存储过程: -- ============================================= -- Author: ******************* -- Create date: 11.07.2013 -- Description: Gets User Personal Details -- ===================

您好,我已经创建了一个存储过程,该存储过程链接到一个具有三个外键的表地址:

-材料地址 -HomeAddressID -后腹腔镜

这是我创建的存储过程:

-- =============================================
-- Author:  *******************
-- Create date: 11.07.2013
-- Description: Gets User Personal Details
-- =============================================
    ALTER PROCEDURE [eConnect].[GetUserPersonalDetails]
        @personId int
    AS
    BEGIN
        SELECT Persons.PersonalID,
               Persons.FirstName ,
               Persons.MiddleName , 
               Persons.LastName ,
               Persons.DateOfBirth,
               Persons.CityOfBirth ,
               Persons.BSN ,
               Persons.SecondaryEmail ,
               Persons.HomePhone ,
               Persons.WorkPhone ,
               Persons.MobilePhone,
               MaterialAddress.StreetName ,
               MaterialAddress.PostCode ,
               MaterialAddress.City ,
               HomeAddress.StreetName ,
               HomeAddress.PostCode ,
               HomeAddress.City ,
               PostalAddress.StreetName ,
               PostalAddress.PostCode ,
               PostalAddress.City
        FROM Sync_Persons as Persons
        JOIN Sync_Addresses as MaterialAddress ON Persons.MaterialAddressID = MaterialAddress.AddressID
        JOIN Sync_Addresses as HomeAddress ON Persons.HomeAddressID = HomeAddress.AddressID
        JOIN Sync_Addresses as PostalAddress ON Persons.PostalAddressId = PostalAddress.AddressID
        WHERE Persons.PersonalID = @personId
    END
当我尝试执行此操作时,会出现以下错误:

Msg 245,16级,状态1,过程GetUserPersonalDetails,第11行将varchar值“I-024800”转换为时失败 数据类型int

本例中的第11行是:--Description:获取用户个人详细信息


为什么我在评论中出现错误?我如何更正它?

尝试更改这一行-

WHERE CAST(SUBSTRING(
     Persons.PersonalID, 
     CHARINDEX('-', Persons.PersonalID) + 1, 
     LEN(Persons.PersonalID)
) AS INT) = @personId
或者试试这个-

WHERE Persons.PersonalID = 'I-' + CAST(@personId AS VARCHAR(10))

看起来Persons中的PersonalID列可能是某个序列或身份的计算列。因为@personId已经是一个int,这意味着PeronalID是'I-024800'的值,所以添加'I-'将不起任何作用。如果正确的表达式应该更改为'I-'+CAST(@personId AS varchar(10))是的,这很好,但我仍然认为更改正确的表达式会更好,因为左侧保留搜索表达式。现在,您强制它比较必须首先通过强制转换获得的非索引值。