Sql server 循环时不允许隐式转换

Sql server 循环时不允许隐式转换,sql-server,while-loop,implicit-conversion,Sql Server,While Loop,Implicit Conversion,我正在尝试执行下面的查询,但一直出现此错误: Msg 257,第16级,状态3,程序SPRPtenrentrollDBS1,第802行[批次开始第3行] 不允许从数据类型datetime隐式转换为int。使用CONVERT函数运行此查询 看起来每个循环大约有1个错误 USE [DBs1] GO SELECT ROW_NUMBER() OVER (ORDER BY siteid) AS rownum, siteid INTO rowsiteRentRoll FROM dbo.sites CRE

我正在尝试执行下面的查询,但一直出现此错误:

Msg 257,第16级,状态3,程序SPRPtenrentrollDBS1,第802行[批次开始第3行] 不允许从数据类型datetime隐式转换为int。使用CONVERT函数运行此查询

看起来每个循环大约有1个错误

USE [DBs1]
GO

SELECT ROW_NUMBER() OVER (ORDER BY siteid) AS rownum, siteid INTO rowsiteRentRoll FROM dbo.sites

CREATE TABLE temptableRentRoll
(
    SiteID1 INT,
    LedgerID INT,
    sUnit VARCHAR (200),
    sSize VARCHAR (200),
    Area1 DECIMAL (19,2),
    UnitID INT,
    SiteID INT,
    EmployeeID INT ,
    UnitTypeID INT,
    UnitZoneID VARCHAR (200),
    MapRAID_Row VARCHAR (200),
    MapRAID_Aisle VARCHAR (200),
    sTrackingCode VARCHAR (200),
    sRFID VARCHAR (200),
    sGlobalUnitName VARCHAR (200),
    TransferredTo_sGlobalSiteNum VARCHAR (200),
    TransferredFrom_sGlobalSiteNum VARCHAR (200),
    dTransferred DATETIME ,
    TransferredBy_EmployeeID INT,
    sUnitName VARCHAR (200),
    iWalkThruOrder INT,
    iFloor INT,
    dcWidth INT,
    dcLength INT,
    dcMapTop VARCHAR (200),
    dcMapLeft VARCHAR (200),
    dcMapTheta VARCHAR (200),
    bMapReversWL VARCHAR (200),
    dcPushRate DECIMAL (19,2),
    dcStdRate DECIMAL (19,2),
    dcStdWeeklyRate DECIMAL (19,2),
    dcStdSecDep DECIMAL (19,2),
    dcStdLateFee DECIMAL (19,2),
    bPower INT,
    bClimate INT,
    bInside INT,
    bAlarm INT,
    bRentable INT,
    bRented INT,
    dCreated DATETIME,
    dDeleted DATETIME,
    sUnitNote VARCHAR (600),
    dUnitNote DATETIME,
    sOSSType VARCHAR (200),
    bCorporate VARCHAR (200),
    bMobile VARCHAR (200),
    dBuilt DATETIME,
    dFirstInService DATETIME,
    iMobileStatus VARCHAR (200),
    bDamaged VARCHAR (200),
    dDamaged DATETIME,
    bCollapsible VARCHAR (200),
    EmployeeID_BuiltBy VARCHAR (200),
    bPermanent VARCHAR (200),
    dUpdated DATETIME,
    uTS VARCHAR(200),
    OldPK INT,
    MarketID_Whse INT,
    sUnitDesc VARCHAR (200),
    iEntryLoc VARCHAR (200),
    dArchived DATETIME,
    bExcludeFromSqftReports VARCHAR (200),
    bExcludeFromWebsite VARCHAR (200),
    bNotReadyToRent VARCHAR (200),
    dcSchedRateMonthly DECIMAL (19,2),
    dSchedRateMonthStrt DATETIME,
    dcSchedRateWeekly  DECIMAL (19,2),
    dSchedRateWeeklyStrt DATETIME,
    iADA INT,
    iDoorType VARCHAR (200),
    iVehicleStorageAllowed VARCHAR (200),
    iDaysVacant VARCHAR (200),
    dcWebRate DECIMAL (19,2),
    dcWebPushRate DECIMAL (19,2),
    LockID VARCHAR (200),
    Area DECIMAL (19,2),
    sTaxExempt VARCHAR (200),
    sTenant VARCHAR (400),
    sCompany VARCHAR (400),
    iAnnivDays INT,
    dLeaseDate DATETIME,
    dcSecDep DECIMAL (19,2),
    dcStandardRate DECIMAL (19,2),
    dcRent DECIMAL (19,2),
    dcVar DECIMAL (19,2),
    dSchedRentStrt DATETIME,
    dcSchedRent DECIMAL (19,2),
    dcChargeBalance DECIMAL (19,2),
    dPaidThru DATETIME,
    dcPrePaidRentLiability DECIMAL (19,2),
    CreditCardID DECIMAL (19,2),
    dRentLastChanged DATETIME,
    DaysSame DATETIME,
    dSchedOut DATETIME,
    TenantID INT,
    sEmail VARCHAR (200),
    dcInsurPremium DECIMAL (19,2),
    dcPushRateAtMoveIn DECIMAL (19,2),
    iAutoBillType INT

)


DECLARE @enddate datetime
SET @enddate = DATEADD(ss, -1, DATEADD(month, DATEDIFF(month, 0, getdate()), 0))

DECLARE @maxrow INT
SET @maxrow = (SELECT COUNT(siteid) FROM rowsiteRentRoll)

DECLARE @row INT
SET @row = 1


WHILE(@row <= @maxrow)
BEGIN

DECLARE @siteidrow INT
SET @siteidrow = (SELECT siteid FROM rowsiteRentRoll WHERE rownum = @row)

INSERT INTO temptableRentRoll 
(
    SiteID1,
    LedgerID,
    sUnit,
    sSize,
    Area1,
    UnitID,
    SiteID,
    EmployeeID,
    UnitTypeID,
    UnitZoneID,
    MapRAID_Row,
    MapRAID_Aisle,
    sTrackingCode,
    sRFID,
    sGlobalUnitName,
    TransferredTo_sGlobalSiteNum,
    TransferredFrom_sGlobalSiteNum,
    dTransferred,
    TransferredBy_EmployeeID,
    sUnitName,
    iWalkThruOrder,
    iFloor,
    dcWidth,
    dcLength,
    dcMapTop,
    dcMapLeft,
    dcMapTheta,
    bMapReversWL,
    dcPushRate,
    dcStdRate,
    dcStdWeeklyRate,
    dcStdSecDep,
    dcStdLateFee,
    bPower,
    bClimate,
    bInside,
    bAlarm,
    bRentable,
    bRented,
    dCreated,
    dDeleted,
    sUnitNote,
    dUnitNote,
    sOSSType,
    bCorporate,
    bMobile,
    dBuilt,
    dFirstInService,
    iMobileStatus,
    bDamaged,
    dDamaged,
    bCollapsible,
    EmployeeID_BuiltBy,
    bPermanent,
    dUpdated,
    uTS,
    OldPK,
    MarketID_Whse,
    sUnitDesc,
    iEntryLoc,
    dArchived,
    bExcludeFromSqftReports,
    bExcludeFromWebsite,
    bNotReadyToRent,
    dcSchedRateMonthly,
    dSchedRateMonthStrt,
    dcSchedRateWeekly,
    dSchedRateWeeklyStrt,
    iADA,
    iDoorType,
    iVehicleStorageAllowed,
    iDaysVacant,
    dcWebRate,
    dcWebPushRate,
    LockID,
    Area,
    sTaxExempt,
    sTenant,
    sCompany,
    iAnnivDays,
    dLeaseDate,
    dcSecDep,
    dcStandardRate,
    dcRent,
    dcVar,
    dSchedRentStrt,
    dcSchedRent,
    dcChargeBalance,
    dPaidThru,
    dcPrePaidRentLiability,
    CreditCardID,
    dRentLastChanged,
    DaysSame,
    dSchedOut,
    TenantID,
    sEmail,
    dcInsurPremium,
    dcPushRateAtMoveIn,
    iAutoBillType
    )


EXEC dbo.spRptTenRentRolldbs1
        @SiteID = @siteidrow,
        @dEnd = @enddate,
        @Filter = '100'

SET @row = @row + 1

END
我更新了我的代码,以使用上面返回的确切数据类型:

SELECT ROW_NUMBER() OVER (ORDER BY siteid) AS rownum, siteid INTO rowsiteRentRoll FROM dbo.sites

CREATE TABLE temptableRentRoll
(
    SiteID1 int,
    LedgerID int,
    sUnit nvarchar(6),
    sSize varchar(4),
    Area1 money,
    UnitID int,
    SiteID int,
    EmployeeID int,
    UnitTypeID int,
    UnitZoneID int,
    MarketID_Whse int,
    MapRAID_Row int,
    MapRAID_Aisle int,
    sTrackingCode nvarchar(30),
    sRFID nvarchar(30),
    sGlobalUnitName nvarchar(30),
    TransferredTo_sGlobalSiteNum nvarchar(20),
    TransferredFrom_sGlobalSiteNum nvarchar(20),
    dTransferred datetime,
    TransferredBy_EmployeeID int,
    sUnitName nvarchar(6),
    iWalkThruOrder int,
    iFloor int,
    dcWidth money,
    dcLength money,
    dcMapTop money,
    dcMapLeft money,
    dcMapTheta money,
    bMapReversWL bit,
    dcPushRate money,
    dcStdRate money,
    dcStdWeeklyRate money,
    dcStdSecDep money,
    dcStdLateFee money,
    bPower bit,
    bClimate bit,
    bInside bit,
    bAlarm bit,
    bRentable bit,
    bRented bit,
    dCreated datetime,
    dDeleted datetime,
    sUnitNote nvarchar(150),
    dUnitNote datetime,
    sOSSType nvarchar(10),
    bCorporate bit,
    bMobile bit,
    dBuilt datetime,
    dFirstInService datetime,
    iMobileStatus int,
    bDamaged bit,
    dDamaged datetime,
    bCollapsible bit,
    EmployeeID_BuiltBy int,
    sUnitDesc nvarchar(50),
    iEntryLoc int,
    bExcludeFromSqftReports bit,
    bExcludeFromWebsite bit,
    bNotReadyToRent bit,
    iADA int,
    iDoorType int,
    iVehicleStorageAllowed int,
    dArchived datetime,
    bPermanent bit,
    dUpdated datetime,
    uTS binary (8),
    OldPK int,
    dcSchedRateMonthly money,
    dSchedRateMonthStrt datetime,
    dcSchedRateWeekly money,
    dSchedRateWeeklyStrt datetime,
    iDaysVacant int,
    dcWebRate money,
    dcWebPushRate money,
    LockID int,
    Area money,
    sTaxExempt nvarchar(1),
    sTenant nvarchar(100),
    sCompany nvarchar(80),
    iAnnivDays int,
    dLeaseDate datetime,
    dcSecDep money,
    dcStandardRate money,
    dcRent money,
    dcVar money,
    dSchedRentStrt datetime,
    dcSchedRent money,
    dcChargeBalance money,
    dPaidThru datetime,
    dcPrePaidRentLiability numeric(38,4),
    CreditCardID int,
    dRentLastChanged datetime,
    DaysSame int,
    dSchedOut datetime,
    TenantID int,
    sEmail nvarchar(100),
    dcInsurPremium money,
    dcPushRateAtMoveIn money,
    iAutoBillType int



)


DECLARE @enddate datetime
SET @enddate = DATEADD(ss, -1, DATEADD(month, DATEDIFF(month, 0, getdate()), 0))

DECLARE @maxrow INT
SET @maxrow = (SELECT COUNT(siteid) FROM rowsiteRentRoll)

DECLARE @row INT
SET @row = 1


WHILE(@row <= @maxrow)
BEGIN

DECLARE @siteidrow INT
SET @siteidrow = (SELECT siteid FROM rowsiteRentRoll WHERE rownum = @row)

INSERT INTO temptableRentRoll 
(
    SiteID1,
    LedgerID,
    sUnit,
    sSize,
    Area1,
    UnitID,
    SiteID,
    EmployeeID,
    UnitTypeID,
    UnitZoneID,
    MapRAID_Row,
    MapRAID_Aisle,
    sTrackingCode,
    sRFID,
    sGlobalUnitName,
    TransferredTo_sGlobalSiteNum,
    TransferredFrom_sGlobalSiteNum,
    dTransferred,
    TransferredBy_EmployeeID,
    sUnitName,
    iWalkThruOrder,
    iFloor,
    dcWidth,
    dcLength,
    dcMapTop,
    dcMapLeft,
    dcMapTheta,
    bMapReversWL,
    dcPushRate,
    dcStdRate,
    dcStdWeeklyRate,
    dcStdSecDep,
    dcStdLateFee,
    bPower,
    bClimate,
    bInside,
    bAlarm,
    bRentable,
    bRented,
    dCreated,
    dDeleted,
    sUnitNote,
    dUnitNote,
    sOSSType,
    bCorporate,
    bMobile,
    dBuilt,
    dFirstInService,
    iMobileStatus,
    bDamaged,
    dDamaged,
    bCollapsible,
    EmployeeID_BuiltBy,
    bPermanent,
    dUpdated,
    uTS,
    OldPK,
    MarketID_Whse,
    sUnitDesc,
    iEntryLoc,
    dArchived,
    bExcludeFromSqftReports,
    bExcludeFromWebsite,
    bNotReadyToRent,
    dcSchedRateMonthly,
    dSchedRateMonthStrt,
    dcSchedRateWeekly,
    dSchedRateWeeklyStrt,
    iADA,
    iDoorType,
    iVehicleStorageAllowed,
    iDaysVacant,
    dcWebRate,
    dcWebPushRate,
    LockID,
    Area,
    sTaxExempt,
    sTenant,
    sCompany,
    iAnnivDays,
    dLeaseDate,
    dcSecDep,
    dcStandardRate,
    dcRent,
    dcVar,
    dSchedRentStrt,
    dcSchedRent,
    dcChargeBalance,
    dPaidThru,
    dcPrePaidRentLiability,
    CreditCardID,
    dRentLastChanged,
    DaysSame,
    dSchedOut,
    TenantID,
    sEmail,
    dcInsurPremium,
    dcPushRateAtMoveIn,
    iAutoBillType
    )


EXEC dbo.spRptTenRentRolldbs1
        @SiteID = @siteidrow,
        @dEnd = @enddate,
        @Filter = '100'

SET @row = @row + 1

END
不知何故,我仍然在不同的批处理起始行中收到相同的错误消息:

Msg 257,16级,状态3,程序SPRPTENRENTROLLDBS1,第802行[批次开始第6行] 不允许从数据类型datetime隐式转换为int。使用CONVERT函数运行此查询


据我所知,这是不可能的,我提取了SP返回的确切数据类型,并将它们作为我的表定义。。这怎么可能呢?

对于其他有类似问题的人来说,这是一个简洁的答案

结果我的数据类型出了问题。我不知道具体是什么问题,因为我找到了一种方法,可以使用直接来自SP的标签覆盖所有数据标签

我运行此命令以获取SP返回的所有数据类型的列表:

然后,我将结果集转储到excel中,以快速重新创建表创建代码。然后我修改了我的查询以包含新的数据类型,这最终解决了我的问题

我之所以这样说,最终是因为我遇到了一个额外的问题,我意外地将其中一列的顺序放错了,这导致了我最初收到的同一个错误消息——因此,这个特定的错误似乎并不一定意味着您有数据类型转换问题


这似乎也可能意味着表创建/定义结构有问题。

您试图在int类型的列中插入日期时间。您需要仔细检查代码,找到int列的位置,然后查看是否在所有列中插入int,错误表明您不是。错误消息表明问题出在SPRPtenrentrollDBS1中。您需要找到该进程的相关部分,并将其粘贴到此处。否则,你的问题就离题了,因为没有人能够重现错误。停止假设——循环在很大程度上是不相关的。在调用过程之前,只需打印提供给过程的参数值。这将生成一个很长的值列表,但最后打印的值集是在您的过程中产生错误的值集。这样,您就可以直接调用该过程,从而使调试更加容易。是的,您需要经历这个复杂的过程。是否无法使用错误消息在存储过程中查找问题?正如我所说,802行与我看到的错误无关。众所周知,错误消息中的行号很差。简言之,答案是否定的。
SELECT ROW_NUMBER() OVER (ORDER BY siteid) AS rownum, siteid INTO rowsiteRentRoll FROM dbo.sites

CREATE TABLE temptableRentRoll
(
    SiteID1 int,
    LedgerID int,
    sUnit nvarchar(6),
    sSize varchar(4),
    Area1 money,
    UnitID int,
    SiteID int,
    EmployeeID int,
    UnitTypeID int,
    UnitZoneID int,
    MarketID_Whse int,
    MapRAID_Row int,
    MapRAID_Aisle int,
    sTrackingCode nvarchar(30),
    sRFID nvarchar(30),
    sGlobalUnitName nvarchar(30),
    TransferredTo_sGlobalSiteNum nvarchar(20),
    TransferredFrom_sGlobalSiteNum nvarchar(20),
    dTransferred datetime,
    TransferredBy_EmployeeID int,
    sUnitName nvarchar(6),
    iWalkThruOrder int,
    iFloor int,
    dcWidth money,
    dcLength money,
    dcMapTop money,
    dcMapLeft money,
    dcMapTheta money,
    bMapReversWL bit,
    dcPushRate money,
    dcStdRate money,
    dcStdWeeklyRate money,
    dcStdSecDep money,
    dcStdLateFee money,
    bPower bit,
    bClimate bit,
    bInside bit,
    bAlarm bit,
    bRentable bit,
    bRented bit,
    dCreated datetime,
    dDeleted datetime,
    sUnitNote nvarchar(150),
    dUnitNote datetime,
    sOSSType nvarchar(10),
    bCorporate bit,
    bMobile bit,
    dBuilt datetime,
    dFirstInService datetime,
    iMobileStatus int,
    bDamaged bit,
    dDamaged datetime,
    bCollapsible bit,
    EmployeeID_BuiltBy int,
    sUnitDesc nvarchar(50),
    iEntryLoc int,
    bExcludeFromSqftReports bit,
    bExcludeFromWebsite bit,
    bNotReadyToRent bit,
    iADA int,
    iDoorType int,
    iVehicleStorageAllowed int,
    dArchived datetime,
    bPermanent bit,
    dUpdated datetime,
    uTS binary (8),
    OldPK int,
    dcSchedRateMonthly money,
    dSchedRateMonthStrt datetime,
    dcSchedRateWeekly money,
    dSchedRateWeeklyStrt datetime,
    iDaysVacant int,
    dcWebRate money,
    dcWebPushRate money,
    LockID int,
    Area money,
    sTaxExempt nvarchar(1),
    sTenant nvarchar(100),
    sCompany nvarchar(80),
    iAnnivDays int,
    dLeaseDate datetime,
    dcSecDep money,
    dcStandardRate money,
    dcRent money,
    dcVar money,
    dSchedRentStrt datetime,
    dcSchedRent money,
    dcChargeBalance money,
    dPaidThru datetime,
    dcPrePaidRentLiability numeric(38,4),
    CreditCardID int,
    dRentLastChanged datetime,
    DaysSame int,
    dSchedOut datetime,
    TenantID int,
    sEmail nvarchar(100),
    dcInsurPremium money,
    dcPushRateAtMoveIn money,
    iAutoBillType int



)


DECLARE @enddate datetime
SET @enddate = DATEADD(ss, -1, DATEADD(month, DATEDIFF(month, 0, getdate()), 0))

DECLARE @maxrow INT
SET @maxrow = (SELECT COUNT(siteid) FROM rowsiteRentRoll)

DECLARE @row INT
SET @row = 1


WHILE(@row <= @maxrow)
BEGIN

DECLARE @siteidrow INT
SET @siteidrow = (SELECT siteid FROM rowsiteRentRoll WHERE rownum = @row)

INSERT INTO temptableRentRoll 
(
    SiteID1,
    LedgerID,
    sUnit,
    sSize,
    Area1,
    UnitID,
    SiteID,
    EmployeeID,
    UnitTypeID,
    UnitZoneID,
    MapRAID_Row,
    MapRAID_Aisle,
    sTrackingCode,
    sRFID,
    sGlobalUnitName,
    TransferredTo_sGlobalSiteNum,
    TransferredFrom_sGlobalSiteNum,
    dTransferred,
    TransferredBy_EmployeeID,
    sUnitName,
    iWalkThruOrder,
    iFloor,
    dcWidth,
    dcLength,
    dcMapTop,
    dcMapLeft,
    dcMapTheta,
    bMapReversWL,
    dcPushRate,
    dcStdRate,
    dcStdWeeklyRate,
    dcStdSecDep,
    dcStdLateFee,
    bPower,
    bClimate,
    bInside,
    bAlarm,
    bRentable,
    bRented,
    dCreated,
    dDeleted,
    sUnitNote,
    dUnitNote,
    sOSSType,
    bCorporate,
    bMobile,
    dBuilt,
    dFirstInService,
    iMobileStatus,
    bDamaged,
    dDamaged,
    bCollapsible,
    EmployeeID_BuiltBy,
    bPermanent,
    dUpdated,
    uTS,
    OldPK,
    MarketID_Whse,
    sUnitDesc,
    iEntryLoc,
    dArchived,
    bExcludeFromSqftReports,
    bExcludeFromWebsite,
    bNotReadyToRent,
    dcSchedRateMonthly,
    dSchedRateMonthStrt,
    dcSchedRateWeekly,
    dSchedRateWeeklyStrt,
    iADA,
    iDoorType,
    iVehicleStorageAllowed,
    iDaysVacant,
    dcWebRate,
    dcWebPushRate,
    LockID,
    Area,
    sTaxExempt,
    sTenant,
    sCompany,
    iAnnivDays,
    dLeaseDate,
    dcSecDep,
    dcStandardRate,
    dcRent,
    dcVar,
    dSchedRentStrt,
    dcSchedRent,
    dcChargeBalance,
    dPaidThru,
    dcPrePaidRentLiability,
    CreditCardID,
    dRentLastChanged,
    DaysSame,
    dSchedOut,
    TenantID,
    sEmail,
    dcInsurPremium,
    dcPushRateAtMoveIn,
    iAutoBillType
    )


EXEC dbo.spRptTenRentRolldbs1
        @SiteID = @siteidrow,
        @dEnd = @enddate,
        @Filter = '100'

SET @row = @row + 1

END
EXEC sp_describe_first_result_set N'dbo.spRptTenRentRolldbs1'