none
變更欄位屬性 RRS feed

  • 問題

  • table rawdata裡頭約有 500多萬筆資料,而因為匯入資料時把 RecordDateTime 欄位以文字方式匯入,後來需要轉換成 datetime格式,所以透過新增查詢來執行sql statement(如下),但是執行時之後會有錯誤訊息(如最下方),但是同一個表格如果匯入的資料沒那麼多(約200多萬)時,則可以順利完成該sql statement。請問該如何解決此問題?

     

     

     

    USE [LogTable]
    BEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    GO
    CREATE TABLE dbo.Tmp_rawdata
         (
         RecordDateTime datetime NOT NULL,
         CheckINOUT bit NOT NULL,
         license_type varchar(50) NOT NULL,
         UserID varchar(50) NOT NULL
         )  ON [PRIMARY]
    GO
    DECLARE @v sql_variant
    SET @v = N'1: in, 0: out'
    EXECUTE sp_addextendedproperty N'MS_Description', @v, N'SCHEMA', N'dbo',
    N'TABLE', N'Tmp_rawdata', N'COLUMN', N'CheckINOUT'
    GO
    IF EXISTS(SELECT * FROM dbo.rawdata)
          EXEC('INSERT INTO dbo.Tmp_rawdata (RecordDateTime, CheckINOUT,
    license_type, UserID)
               SELECT CONVERT(datetime, RecordDateTime), CheckINOUT,
    license_type, UserID FROM dbo.rawdata WITH (HOLDLOCK TABLOCKX)')
    GO
    DROP TABLE dbo.rawdata
    GO
    EXECUTE sp_rename N'dbo.Tmp_rawdata', N'rawdata', 'OBJECT'
    GO
    CREATE NONCLUSTERED INDEX Index_Type_RecordDateTime_check ON dbo.rawdata
         (
         license_type,
         RecordDateTime,
         CheckINOUT
         ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
    ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY]
    GO
    COMMIT

     

     

     

     

     訊息 241,層級 16,狀態 1,行 1
    從字元字串轉換到 datetime 時,轉換失敗。
    訊息 15248,層級 11,狀態 1,行 1,程序 sp_rename,行 315
    參數 @objname 模糊不清或是所宣告的 @objtype (OBJECT) 有誤。
    訊息 1088,層級 16,狀態 12,行 1
    找不到物件 "dbo.rawdata",原因是物件不存在,或您沒有權限。
    訊息 3902,層級 16,狀態 1,行 1
    COMMIT TRANSACTION 要求沒有對應的 BEGIN TRANSACTION。

    2008年2月21日 下午 05:10

所有回覆

  • Dear Sir,

     

    這個錯誤在我過去的經驗, 可能是在某一筆資料無法被轉換成datetime的format, 而使程式錯誤

    我大致看了您的程式, 似乎沒有做error handle.

    因此您可以檢查一下您的資料中是否有無法轉換成datetime的format在您表示的200萬-500萬筆的資料 (例如您只匯入第201萬筆記錄到400萬筆記錄, 如此也將會落在200萬筆記錄內再做測試 ,最後再只把剩下的匯入做測試)

     

    Best regards,

    微軟技術支援中心-Colin

    2008年2月25日 上午 06:51
  • hi,  Colin,

     

    我確定所有的資料都可以正常轉換為 datetime,已經有另外寫 sql statement 試過。

    2008年2月25日 上午 11:39