2015-06-02 28 views
-5

我遇到問題;我寫了一個SQL觸發器,我得到一個錯誤,那就是:消息257,級別16,狀態3,過程stok_yedek,第75行不允許從數據類型datetime到int的隱式轉換

消息257,級別16,狀態3,過程stok_yedek,75號線

從數據datetime類型爲int隱式轉換是不允許的。使用 CONVERT函數來運行此查詢。

這是我的代碼:

ALTER trigger stok_yedek on dbo.[Instance - Stok (1851)] for insert 
as begin 
      declare @ParentInstance int 
      declare @ParentTemplateConfigurationItem int 
      declare @ParentConfigurationItem int 
      declare @BaseInstance int 
      declare @SortOrder int 
      declare @DateCreated datetime 
      declare @DateModified datetime 
      declare @ModifiedBy int 
      declare @RecycleBin tinyint 
      declare @Archived tinyint 
      declare @OriginalInstance int 
      declare @Stok_Adi nchar(100) 
      declare @Stok_Grup_Kodu int 
      declare @Mevcut_Miktar float 
      declare @Model_No nchar(100) 
      declare @Grubu int 
      declare @Ilgili int 
      declare @Marka nchar(100) 
      declare @Alt_Grubu int 
      declare @Logo_Stok_Kodu nchar(100) 
      declare @Depo_Mevcutu float 
      declare @Antrepo_Mevcutu float 
      declare @Birim int 
      declare @New_Drop_Down nvarchar(128) 
      declare @Masraf_Merkezi_Kodu float 
      declare @Masraf_Merkezi_Kodu2 nchar(100) 
      declare @Tipi nchar(100) 
      declare @Sogutma_Kapasitesi float 
      declare @Marka_Ozel_Kodu int 
      declare @Ozel_Kod nchar(100) 
      declare @Ozel_Kod2 nchar(100) 
      declare @Durumu nvarchar(128) 
      declare @Uretici nchar(100) 
      declare @Aciklama2 nchar(100) 
     select @ParentInstance=inserted.ParentInstance 
      from inserted 
     SELECT @ParentTemplateConfigurationItem=inserted.ParentTemplateConfigurationItem 
    FROM inserted 
    SELECT @ParentConfigurationItem=ParentConfigurationItem 
    FROM inserted 
     SELECT @BaseInstance=BaseInstance FROM inserted 
     SELECT @SortOrder=SortOrder from inserted 
     select @DateCreated=DateCreated from inserted 
     select @DateModified=DateModified from inserted 
     SELECT @ModifiedBy=ModifiedBy FROM inserted 
     SELECT @RecycleBin=RecycleBin FROM inserted 
    select @Archived=Archived FROM inserted 
    SELECT @OriginalInstance=OriginalInstance FROM inserted 
    SELECT @Stok_Adi= [Stok Adı (1852)]FROM inserted 
    SELECT @Stok_Grup_Kodu=[Stok Grup Kodu (1993)] FROM inserted 
    SELECT @Mevcut_Miktar=[Mevcut Miktar (1999)] FROM inserted 
    select @Model_No=[Model No (2001)]FROM inserted 
    SELECT @Grubu=[Grubu (Özel Kod2) (2002)] from inserted 
    select @Ilgili=[İlgili Şirket (2035)] from inserted 
    select @Marka=[Markası (2036)] from inserted 
    select @Alt_Grubu=[Alt Grubu (Özel Kod3) (2397)] from inserted 
    select @Logo_Stok_Kodu=[Logo Stok Kodu (2398)] from inserted 
    select @Depo_Mevcutu=[Depo Mevcutu (2487)] from inserted 
    select @Antrepo_Mevcutu=[Antrepo Mevcutu (2488)]from inserted 
    select @Birim=[Birim (2000)]from inserted 
    select @New_Drop_Down=[New Drop Down (3931)]from inserted 
    select @Masraf_Merkezi_Kodu=[Masraf Merkezi Kodu (3932)]from inserted 
    select @Masraf_Merkezi_Kodu2=[Masraf Merkezi Kodu (3933)]from inserted 
    select @Tipi=[Tipi (3934)] from inserted 
    select @Sogutma_Kapasitesi=[Soğutma Kapasitesi (3935)] from inserted 
    select @Marka_Ozel_Kodu=inserted.[Marka (Özel Kodu) (4046)] from inserted 
    select @Ozel_Kod=[Özel Kod4 (4053)] from inserted 
    select @Ozel_Kod2=[Özel Kod5 (4054)]from inserted 
    select @Durumu=[Durumu (4247)] from inserted 
    select @Uretici=[Üretici Kodu (4302)] from inserted 
    select @Aciklama2=[Açıklama-2 (4303)] from inserted 

    INSERT INTO [EGITIM_01].dbo.[Instance - Stok (1851)] 
      ([ParentInstance] 
      ,[ParentTemplateConfigurationItem] 
      ,[ParentConfigurationItem] 
      ,[BaseInstance] 
      ,[SortOrder] 
      ,[DateCreated] 
      ,[DateModified] 
      ,[ModifiedBy] 
      ,[RecycleBin] 
      ,[Archived] 
      ,[OriginalInstance] 
      ,[Stok Adı (1852)] 
      ,[Stok Grup Kodu (1993)] 
      ,[Mevcut Miktar (1999)] 
      ,[Model No (2001)] 
      ,[Grubu (Özel Kod2) (2002)] 
      ,[İlgili Şirket (2035)] 
      ,[Markası (2036)] 
      ,[Alt Grubu (Özel Kod3) (2397)] 
      ,[Logo Stok Kodu (2398)] 
      ,[Depo Mevcutu (2487)] 
      ,[Antrepo Mevcutu (2488)] 
      ,[Birim (2000)] 
      ,[New Drop Down (3931)] 
      ,[Masraf Merkezi Kodu (3932)] 
      ,[Masraf Merkezi Kodu (3933)] 
      ,[Tipi (3934)] 
      ,[Soğutma Kapasitesi (3935)] 
      ,[Marka (Özel Kodu) (4046)] 
      ,[Özel Kod4 (4053)] 
      ,[Özel Kod5 (4054)] 
      ,[Durumu (4247)] 
      ,[Üretici Kodu (4302)] 
      ,[Açıklama-2 (4303)]) 
    VALUES 
      (@ParentInstance,@ParentInstance,@ParentTemplateConfigurationItem 
    ,@ParentConfigurationItem,@BaseInstance,@SortOrder,@DateCreated 
    ,@DateModified,@ModifiedBy,@RecycleBin,@OriginalInstance,@Stok_Adi, 
    @Stok_Grup_Kodu,@Mevcut_Miktar,@Model_No,@Grubu,@Ilgili, 
    @Marka,@Alt_Grubu,@Logo_Stok_Kodu,@Depo_Mevcutu,@Antrepo_Mevcutu, 
    @Birim,@New_Drop_Down,@Masraf_Merkezi_Kodu,@Masraf_Merkezi_Kodu2,@Tipi 
    ,@Sogutma_Kapasitesi,@Marka,@Ozel_Kod,@Ozel_Kod2,@Durumu,@Uretici 
    ,@Aciklama2 
    ) 
     if @@TRANCOUNT > 0 
    BEGIN 
     COMMIT TRANSACTION InProc; 
-- There is no BEGIN TRAN statement after this statement. However there is no error 266 either. 
     PRINT 'In proc commit: ' + CAST(@@TRANCOUNT as char(1)); 
    END 
    else 
     print @@error 
    end 
    INSERT INTO [Ramazan_Test].[dbo].[stok_yedek] 
      ([ParentInstance] 
      ,[ParentTemplateConfigurationItem] 
      ,[ParentConfigurationItem] 
      ,[BaseInstance] 
      ,[SortOrder] 
      ,[DateCreated] 
      ,[DateModified] 
      ,[ModifiedBy] 
      ,[RecycleBin] 
      ,[Archived] 
      ,[OriginalInstance] 
      ,[Stok_Adi] 
      ,[Stok Grup Kodu (1993)] 
      ,[Mevcut Miktar (1999)] 
      ,[Model No (2001)] 
      ,[Grubu (Özel Kod2) (2002)] 
      ,[İlgili Şirket (2035)] 
      ,[Markası (2036)] 
      ,[Alt Grubu (Özel Kod3) (2397)] 
      ,[Logo Stok Kodu (2398)] 
      ,[Depo Mevcutu (2487)] 
      ,[Antrepo Mevcutu (2488)] 
      ,[Birim (2000)] 
      ,[New Drop Down (3931)] 
      ,[Masraf Merkezi Kodu (3932)] 
      ,[Masraf Merkezi Kodu (3933)] 
      ,[Tipi (3934)] 
      ,[Soğutma Kapasitesi (3935)] 
      ,[Marka (Özel Kodu) (4046)] 
      ,[Özel Kod4 (4053)] 
      ,[Özel Kod5 (4054)] 
      ,[Durumu (4247)] 
      ,[Üretici Kodu (4302)] 
      ,[Açıklama-2 (4303)]) 
    VALUES 
      (@ParentInstance,@ParentInstance,@ParentTemplateConfigurationItem 
    ,@ParentConfigurationItem,@BaseInstance,@SortOrder,@DateCreated 
    ,@DateModified,@ModifiedBy,@RecycleBin,@OriginalInstance,@Stok_Adi, 
    @Stok_Grup_Kodu,@Mevcut_Miktar,@Model_No,@Grubu,@Ilgili, 
    @Marka,@Alt_Grubu,@Logo_Stok_Kodu,@Depo_Mevcutu,@Antrepo_Mevcutu, 
    @Birim,@New_Drop_Down,@Masraf_Merkezi_Kodu,@Masraf_Merkezi_Kodu2,@Tipi 
    ,@Sogutma_Kapasitesi,@Marka,@Ozel_Kod,@Ozel_Kod2,@Durumu,@Uretici 
    ,@Aciklama2 
    ) 

你能幫助我嗎?

+1

神聖低效和錯誤的代碼。您不需要運行單獨的select語句來爲每列設置變量。這裏的REAL問題是你的觸發器假設在插入表中只有一行。這不是sql server的工作原理。您需要通過執行單個插入語句來更改邏輯,而不用在觸發器中使用標量變量。 –

回答

0

datetime變量值轉換爲INT然後INSERT

例如爲:

DECLARE @DateCreated datetime='2015-06-2 11:59:59' 
SELECT CAST(CONVERT(varchar(20),@DateCreated,112) as INT) 

參考上面的代碼在插入@DateCreated@DateModified可以使用:

CAST(CONVERT(varchar(20),@DateCreated,112) as INT),  
CAST(CONVERT(varchar(20),@DateModified ,112) as INT) 
+0

我做到了,但我得到錯誤「算術溢出錯誤轉換表達式爲數據類型日期時間。」什麼是 –

+0

ü可以使用BIGINT數據類型,而不是溢出發生 – Sharvari

+0

你的意思是「鑄造(CONVERT(varchar(20),@ DateModified,112)as bigint)」 –

0

我做清理作業的一點點在你的代碼你。你可以通過保持你的代碼簡單和乾淨,像這樣保存自己從一些不必要的頭痛:

ALTER TRIGGER stok_yedek ON dbo.[Instance - Stok (1851)] 
FOR INSERT 
AS 
BEGIN 
    INSERT INTO [EGITIM_01].dbo.[Instance - Stok (1851)] (
     [ParentInstance] 
     ,[ParentTemplateConfigurationItem] 
     ,[ParentConfigurationItem] 
     ,[BaseInstance] 
     ,[SortOrder] 
     ,[DateCreated] 
     ,[DateModified] 
     ,[ModifiedBy] 
     ,[RecycleBin] 
     ,[Archived] 
     ,[OriginalInstance] 
     ,[Stok Adı (1852)] 
     ,[Stok Grup Kodu (1993)] 
     ,[Mevcut Miktar (1999)] 
     ,[Model No (2001)] 
     ,[Grubu (Özel Kod2) (2002)] 
     ,[İlgili Şirket (2035)] 
     ,[Markası (2036)] 
     ,[Alt Grubu (Özel Kod3) (2397)] 
     ,[Logo Stok Kodu (2398)] 
     ,[Depo Mevcutu (2487)] 
     ,[Antrepo Mevcutu (2488)] 
     ,[Birim (2000)] 
     ,[New Drop Down (3931)] 
     ,[Masraf Merkezi Kodu (3932)] 
     ,[Masraf Merkezi Kodu (3933)] 
     ,[Tipi (3934)] 
     ,[Soğutma Kapasitesi (3935)] 
     ,[Marka (Özel Kodu) (4046)] 
     ,[Özel Kod4 (4053)] 
     ,[Özel Kod5 (4054)] 
     ,[Durumu (4247)] 
     ,[Üretici Kodu (4302)] 
     ,[Açıklama-2 (4303)] 
     ) 
    SELECT i.[ParentInstance] 
     ,i.[ParentTemplateConfigurationItem] 
     ,i.[ParentConfigurationItem] 
     ,i.[BaseInstance] 
     ,i.[SortOrder] 
     ,i.[DateCreated] 
     ,i.[DateModified] 
     ,i.[ModifiedBy] 
     ,i.[RecycleBin] 
     ,i.[Archived] 
     ,i.[OriginalInstance] 
     ,i.[Stok Adı (1852)] 
     ,i.[Stok Grup Kodu (1993)] 
     ,i.[Mevcut Miktar (1999)] 
     ,i.[Model No (2001)] 
     ,i.[Grubu (Özel Kod2) (2002)] 
     ,i.[İlgili Şirket (2035)] 
     ,i.[Markası (2036)] 
     ,i.[Alt Grubu (Özel Kod3) (2397)] 
     ,i.[Logo Stok Kodu (2398)] 
     ,i.[Depo Mevcutu (2487)] 
     ,i.[Antrepo Mevcutu (2488)] 
     ,i.[Birim (2000)] 
     ,i.[New Drop Down (3931)] 
     ,i.[Masraf Merkezi Kodu (3932)] 
     ,i.[Masraf Merkezi Kodu (3933)] 
     ,i.[Tipi (3934)] 
     ,i.[Soğutma Kapasitesi (3935)] 
     ,i.[Marka (Özel Kodu) (4046)] 
     ,i.[Özel Kod4 (4053)] 
     ,i.[Özel Kod5 (4054)] 
     ,i.[Durumu (4247)] 
     ,i.[Üretici Kodu (4302)] 
     ,i.[Açıklama-2 (4303)] 
    FROM inserted i 

    IF @@TRANCOUNT > 0 
    BEGIN 
     COMMIT TRANSACTION InProc; 

     -- There is no BEGIN TRAN statement after this statement. However there is no error 266 either. 
     PRINT 'In proc commit: ' + CAST(@@TRANCOUNT AS CHAR(1)); 
    END 
    ELSE 
     PRINT @@error 
END 

BEGIN 
INSERT INTO [Ramazan_Test].[dbo].[stok_yedek] (
    [ParentInstance] 
    ,[ParentTemplateConfigurationItem] 
    ,[ParentConfigurationItem] 
    ,[BaseInstance] 
    ,[SortOrder] 
    ,[DateCreated] 
    ,[DateModified] 
    ,[ModifiedBy] 
    ,[RecycleBin] 
    ,[Archived] 
    ,[OriginalInstance] 
    ,[Stok_Adi] 
    ,[Stok Grup Kodu (1993)] 
    ,[Mevcut Miktar (1999)] 
    ,[Model No (2001)] 
    ,[Grubu (Özel Kod2) (2002)] 
    ,[İlgili Şirket (2035)] 
    ,[Markası (2036)] 
    ,[Alt Grubu (Özel Kod3) (2397)] 
    ,[Logo Stok Kodu (2398)] 
    ,[Depo Mevcutu (2487)] 
    ,[Antrepo Mevcutu (2488)] 
    ,[Birim (2000)] 
    ,[New Drop Down (3931)] 
    ,[Masraf Merkezi Kodu (3932)] 
    ,[Masraf Merkezi Kodu (3933)] 
    ,[Tipi (3934)] 
    ,[Soğutma Kapasitesi (3935)] 
    ,[Marka (Özel Kodu) (4046)] 
    ,[Özel Kod4 (4053)] 
    ,[Özel Kod5 (4054)] 
    ,[Durumu (4247)] 
    ,[Üretici Kodu (4302)] 
    ,[Açıklama-2 (4303)] 
    ) 
SELECT ins.[ParentInstance] 
    ,ins.[ParentTemplateConfigurationItem] 
    ,ins.[ParentConfigurationItem] 
    ,ins.[BaseInstance] 
    ,ins.[SortOrder] 
    ,ins.[DateCreated] 
    ,ins.[DateModified] 
    ,ins.[ModifiedBy] 
    ,ins.[RecycleBin] 
    ,ins.[Archived] 
    ,ins.[OriginalInstance] 
    ,ins.[Stok_Adi] 
    ,ins.[Stok Grup Kodu (1993)] 
    ,ins.[Mevcut Miktar (1999)] 
    ,ins.[Model No (2001)] 
    ,ins.[Grubu (Özel Kod2) (2002)] 
    ,ins.[İlgili Şirket (2035)] 
    ,ins.[Markası (2036)] 
    ,ins.[Alt Grubu (Özel Kod3) (2397)] 
    ,ins.[Logo Stok Kodu (2398)] 
    ,ins.[Depo Mevcutu (2487)] 
    ,ins.[Antrepo Mevcutu (2488)] 
    ,ins.[Birim (2000)] 
    ,ins.[New Drop Down (3931)] 
    ,ins.[Masraf Merkezi Kodu (3932)] 
    ,ins.[Masraf Merkezi Kodu (3933)] 
    ,ins.[Tipi (3934)] 
    ,ins.[Soğutma Kapasitesi (3935)] 
    ,ins.[Marka (Özel Kodu) (4046)] 
    ,ins.[Özel Kod4 (4053)] 
    ,ins.[Özel Kod5 (4054)] 
    ,ins.[Durumu (4247)] 
    ,ins.[Üretici Kodu (4302)] 
    ,ins.[Açıklama-2 (4303)] 
FROM inserted ins 

END 
+0

謝謝尼泊爾我可以試試 –

+0

hiı可以解決錯誤,但得到另一個錯誤:(錯誤是定義「ROLLBACK TRANSACTION請求沒有相應的BEGIN TRANSACTION」 –

+0

您將需要在提交之前添加'BEGIN TRAN'。 – FutbolFan

相關問題