将数据类型varchar转换为存储过程中的bigint时出错

dav*_*ser 3 sql t-sql sql-server bigint

我正在尝试使用该usp_TimesheetsAuditsLoadAllbyId 42747, NULL命令调用此过程.

但我总是得到一个错误

消息8114,级别16,状态5,过程usp_TimesheetsAuditsLoadAllById,第9行将
数据类型varchar转换为bigint时出错.

所述IDTimesheetsAudits表是一个bigint类型.我尝试了几种类型的转换和演员表,但我现在真的被卡住了.

希望有人可以提供帮助.谢谢

ALTER PROCEDURE [dbo].[usp_TimesheetsAuditsLoadAllById]
(
    @Id INT,
    @StartDate DATETIME
)
AS
BEGIN
   SET NOCOUNT ON

   SELECT TOP 51 * 
   FROM 
      (SELECT TOP 51 
          ID,
          Type, 
          ReferrerId,
          CAST(Description AS VARCHAR(MAX)) AS Description,
          OnBehalfOf,
          Creator,
          DateCreated 
       FROM 
          TimesheetsAudits 
       WHERE 
          (ReferrerID = @Id) AND
          (@StartDate IS NULL OR DateCreated < @StartDate)
       ORDER BY
          DateCreated DESC

       UNION

       SELECT TOP 51 
          tia.ID,
          tia.Type, 
          tia.ReferrerId,
          '[Day: ' + CAST(DayNr AS VARCHAR(5)) + '] ' + CAST(tia.Description AS VARCHAR(MAX)) AS Description,
          tia.OnBehalfOf,
          tia.Creator,
          tia.DateCreated 
       FROM 
          TimesheetItemsAudits tia
       INNER JOIN 
          TimesheetItems ti ON tia.ReferrerId = ti.ID
       WHERE 
          (ti.TimesheetID = @Id) AND
          (@StartDate IS NULL OR tia.DateCreated < @StartDate)
       ORDER BY 
          tia.DateCreated DESC) t
   ORDER BY 
       t.DateCreated DESC
END
Run Code Online (Sandbox Code Playgroud)

来自注释的表的表定义:

CREATE TABLE [dbo].[TimesheetsAudits]( 
  [ID] [bigint] IDENTITY(1,1) NOT NULL, 
  [Type] [tinyint] NOT NULL, 
  [ReferrerId] [varchar](15) NOT NULL, 
  [Description] [text] NULL, 
  [OnBehalfOf] [varchar](10) NULL, 
  [Creator] [varchar](10) NOT NULL, 
  [DateCreated] [datetime] NOT NULL
)



CREATE TABLE [dbo].[TimesheetItemsAudits]( 
  [ID] [bigint] IDENTITY(1,1) NOT NULL, 
  [Type] [tinyint] NOT NULL, 
  [ReferrerId] [varchar](15) NOT NULL, 
  [Description] [text] NULL, 
  [OnBehalfOf] [varchar](10) NULL, 
  [Creator] [varchar](10) NOT NULL, 
  [DateCreated] [datetime] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

小智 6

你执行[dbo]的内部联接.[TimesheetsAudits]和TimesheetItems ti ON tia.ReferrerId = ti.ID

tia.[ReferrerId]是varchar和ti.[ID]是[bigint].

我期望tia中的值.[ReferrerId]无法转换为bigint.

请尝试以下方法:

SELECT [ReferrerId] FROM TimesheetItemsAudits WHERE ISNUMERIC(ReferrerId) = 0
Run Code Online (Sandbox Code Playgroud)

这可以帮助您找到"有问题的行".

  • 谢谢.我看到了那个令人讨厌的人.解决. (2认同)