| 

.NET C# Java Javascript Exception

1
Hallo, ich habe eine Tabelle mittels folgendem Script erstellt.

/****** Object:  Table [dbo].[GP_APKopf]    Script Date: 07/22/2013 10:38:43 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[GP_APKopf](
[APKopfNr] [varchar](50) NOT NULL,
[Bezeichnung] [varchar](max) NULL,
[Gesperrt] [int] NULL,
[CustomInfo1] [varchar](max) NULL,
[CustomInfo2] [varchar](max) NULL,
[CustomInfo3] [varchar](max) NULL,
[STLKopfNr] [varchar](50) NULL,
[VorlageAPKopfNr] [varchar](50) NULL,
[ErstelltAm] [datetime] NULL,
[ErstelltVon] [varchar](50) NULL,
[Mandant] [int] NOT NULL,
[Ueberlappung] [int] NULL,
CONSTRAINT [PK_APKopf] PRIMARY KEY CLUSTERED
(
[APKopfNr] ASC,
[Mandant] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Id der zugehörigen Stückliste oder leer' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'GP_APKopf', @level2type=N'COLUMN',@level2name=N'STLKopfNr'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Ein temporärer AP hat einen Verweis auf seinen Modell-AP' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'GP_APKopf', @level2type=N'COLUMN',@level2name=N'VorlageAPKopfNr'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Die Arbeitsplan-Kopfdaten.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'GP_APKopf'
GO


Jetzt hat sich unsere Struktur verändert und das ganze soll in eine andere Tabelle kopiert werden. Dafür habe ich dieses Script geschrieben:

/****** Object:  Table [dbo].[GP_APKopf]    Script Date: 06/26/2013 08:30:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[gptbl_routing]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[gptbl_routing](
[client_id] [int] NOT NULL,
[routing_id] [varchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[created_by] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[created_on] [datetime] NULL,
[info1] [varchar](max) COLLATE Latin1_General_CI_AS NULL,
[info2] [varchar](max) COLLATE Latin1_General_CI_AS NULL,
[info3] [varchar](max) COLLATE Latin1_General_CI_AS NULL,
[name] [varchar](max) COLLATE Latin1_General_CI_AS NULL,
[allow_overlap] [int] NULL,
[bom_id] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
[locked] [int] NULL,
[master_routing_id] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
CONSTRAINT [PK_routing] PRIMARY KEY CLUSTERED
(
[client_id] ASC,
[routing_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
END
GO
IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'MS_Description' , N'SCHEMA',N'dbo', N'TABLE',N'gptbl_routing', N'COLUMN',N'bom_id'))
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Id der zugehörigen Stückliste oder leer' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'gptbl_routing', @level2type=N'COLUMN',@level2name=N'bom_id'
GO
IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'MS_Description' , N'SCHEMA',N'dbo', N'TABLE',N'gptbl_routing', N'COLUMN',N'master_routing_id'))
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Ein temporärer AP hat einen Verweis auf seinen Modell-AP' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'gptbl_routing', @level2type=N'COLUMN',@level2name=N'master_routing_id'
GO
IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'MS_Description' , N'SCHEMA',N'dbo', N'TABLE',N'gptbl_routing', NULL,NULL))
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Die Arbeitsplan-Kopfdaten.' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'gptbl_routing'
GO

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GP_APKopf]') AND type in (N'U'))
BEGIN
/*
insert into [dbo].[gptbl_routing]
values (100, 'blubber', 'steve', C(DATETIME, '20041223'), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
*/

INSERT INTO [dbo].[gptbl_routing]
SELECT [APKopfNr] as [routing_id]
,[Bezeichnung] as [name]
,[Gesperrt] as [locked]
,[CustomInfo1] as [info1]
,[CustomInfo2] as [info2]
,[CustomInfo3] as [info3]
,[STLKopfNr] as [bom_id]
,[VorlageAPKopfNr] as [master_routing_id]
,[ErstelltAm]as [created_on]
,[ErstelltVon] as [created_by]
,[Mandant] as [client_id]
,[Ueberlappung] as [allow_overlap]
FROM [dbo].[GP_APKopf]

DECLARE @OLDCOUNT int;
DECLARE @NEWCOUNT int;
SELECT @OLDCOUNT = COUNT(*) FROM [dbo].[GP_APKopf]
SELECT @NEWCOUNT = COUNT(*) FROM [dbo].[gptbl_routing]


IF @OLDCOUNT = @NEWCOUNT
BEGIN
DROP TABLE [dbo].[GP_APKopf]
END

END


Das wirft mir aber

Meldung 257, Ebene 16, Status 3, Zeile 9
Die implizite Konvertierung vom datetime-Datentyp in int ist nicht zulässig. Verwenden Sie die CONVERT-Funktion, um diese Abfrage auszuführen.


Ich habe schon versucht [ErstelltAm] mittels Convert oder Cast umzubauen, aber das bringt alles nichts...

Beide Spalten sind Datetime und sollten eigentlich keine Probleme geben. Vielleicht habt Ihr ja eine Idee...

Grüße
22.07.2013
Barados 288 1 7
Barados 288 1 7
3 Antworten
0
Versuch mal folgende Zeile:

, DATEADD(d, CAST([ErstelltAm] as int), '1.1.1900') as [created_on]

Aber laut deiner Tabellendefinition ist ErstelltAm bereits eine DateTime-Spalte.
22.07.2013
Floyd 14,6k 3 9
selbe Fehlermeldung

Wenn ich per Hand Daten als Datetime eintrage, funktioniert es natüclich...
Barados 22.07.2013
0
Ein freundliches

SELECT
table_name=sysobjects.name,
column_name=syscolumns.name,
datatype=systypes.name,
length=syscolumns.length
FROM
sysobjects
JOIN syscolumns ON sysobjects.[id] = syscolumns.[id]
JOIN systypes ON syscolumns.xtype=systypes.xtype
WHERE
sysobjects.[xtype]='U'
ORDER BY
sysobjects.[name],
syscolumns.colid


liefert mir auch

gptbl_routing created_on datetime 8
GP_APKopf ErstelltAm datetime 8
22.07.2013
Barados 288 1 7
0
Problem ist gelöst.

Die Reihenfolge scheint auch bei Angabe des Namens notwendig zu sein... Schon strange...

INSERT INTO [dbo].[gptbl_routing] 
SELECT [Mandant] as [client_id],
[APKopfNr] as [routing_id],
[ErstelltVon] as [created_by],
[ErstelltAm] as [created_on],
[CustomInfo1] as [info1],
[CustomInfo2] as [info2],
[CustomInfo3] as [info3],
[Bezeichnung] as [name],
[Ueberlappung] as [allow_overlap],
[STLKopfNr] as [bom_id],
[Gesperrt] as [locked],
[VorlageAPKopfNr] as [master_routing_id]
FROM [dbo].[GP_APKopf]
22.07.2013
Barados 288 1 7
Richtig, die Reihenfolge muss IMMER richtig sein... Außer Du gibst die Spalten beim INSERT oben mit an, also:

INSERT INTO [dbo].[gptbl_routing]
( client_id, routing_id, created_by, created_on,
info1, info2, info3, name, allow_overlap, bom_id,
locked, master_routing_id )
SELECT [Mandant], [APKopfNr], [ErstelltVon], [ErstelltAm],
[CustomInfo1], [CustomInfo2], [CustomInfo3], [Bezeichnung],
[Ueberlappung], [STLKopfNr], [Gesperrt], [VorlageAPKopfNr]
FROM [dbo].[GP_APKopf]
commänder 22.07.2013
Das verwundert halt im ersten Moment. Wenn ich sage wie es heissen soll, sollte der sql-server ja die Spalten richtig zuweisen.

Aber ok. Jetzt weiß ich es ja =)
Barados 22.07.2013

Stelle deine Mssql-Frage jetzt!