Sql server 注释行出错
您好,我已经创建了一个存储过程,该存储过程链接到一个具有三个外键的表地址: -材料地址 -HomeAddressID -后腹腔镜 这是我创建的存储过程:Sql server 注释行出错,sql-server,ssms,Sql Server,Ssms,您好,我已经创建了一个存储过程,该存储过程链接到一个具有三个外键的表地址: -材料地址 -HomeAddressID -后腹腔镜 这是我创建的存储过程: -- ============================================= -- Author: ******************* -- Create date: 11.07.2013 -- Description: Gets User Personal Details -- ===================
-- =============================================
-- 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))是的,这很好,但我仍然认为更改正确的表达式会更好,因为左侧保留搜索表达式。现在,您强制它比较必须首先通过强制转换获得的非索引值。