Неявное преобразование не допускается, пока цикл - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь выполнить приведенный ниже запрос и получаю эту ошибку:

Сообщение 257, Уровень 16, Состояние 3, Процедура spRptTenRentRolldbs1, Строка 802 [Batch Start Line 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

Я читал, что это может произойти, если определение таблицы несоответствует тому, что вставляется, я проверил это, и все совпадало.

На данный момент я должен предположить, что я неправильно классифицировал тип данных для одного из столбцов.Я просто исхожу из того, что вижу в выводе, некоторые из столбцов содержат только значения NULL, поэтому я не уверен, что они есть, пришлось сделать обоснованное предположение.

К сожалению, это использует оченьсложный SP, который ссылается на все виды других функций и SP.Я стараюсь не прослеживать каждый столбец до источника, чтобы определить тип данных.

Как я могу прочитать ошибку, чтобы определить, какой столбец является проблемой?Я попытался перейти на строку 802 в запросе (не существует) и хранимой процедуре (не имеет никакого смысла).Я думаю, что это может быть затруднено циклом?

ОБНОВЛЕНИЕ

Мне удалось получить все типы данных, возвращенные SP, используя это:

EXEC sp_describe_first_result_set N'dbo.spRptTenRentRolldbs1'

Я обновил свой код, чтобы использовать точные типы данных, возвращаемые приведенным выше:

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

И каким-то образом я все еще получаю то же сообщение об ошибке в другой строке запуска пакета:

Сообщение 257, уровень 16, состояние 3, процедура spRptTenRentRolldbs1, строка 802 [Batch Start Line 6] Неявное преобразование из типа данных datetime в int не допускается.Используйте функцию CONVERT для выполнения этого запроса.

Насколько я могу сказать, это должно быть невозможно, я вытащил точные типы данных, возвращаемые SP, и сделал их моим определением таблицы.как это возможно ???

1 Ответ

0 голосов
/ 05 октября 2018

Краткий ответ для всех, у кого есть подобная проблема ...

В итоге что-то не так с моими типами данных.Я не знаю точно, в чем проблема, потому что я нашел способ перезаписать все свои метки данных метками непосредственно из SP.

Я запустил это, чтобы получить список всех типов данныхвозвращенный SP:

EXEC sp_describe_first_result_set N'dbo.spRptTenRentRolldbs1'

Затем я вывел набор результатов в Excel, чтобы быстро воссоздать код создания моей таблицы.Затем я изменил свой запрос, включив в него новые типы данных, и это «в конечном итоге» решило мою проблему.

Я говорю «в конечном счете», потому что столкнулся с дополнительной проблемой, когда случайно вывел один из столбцов из строя иэто привело к тому же самому сообщению об ошибке, которое я первоначально получал - таким образом, кажется, что эта конкретная ошибка не обязательно означает, что у вас есть проблема преобразования типа данных.

Похоже, это также может означать, что что-то не так с структурой создания / определения таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...