2015-06-02 24 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

相关问题