SQL Server

Escrito por Manu Gonzalez Saez el 20 de Octubre | Nivel Básico

Hola,

He creado una tabla en SQL Server para traerme los datos de una vista de Oracle.
El caso es que lo hago mediante un job en SQL Server Management Studio y me da el siguiente error:

Message
Executed as user: NT AUTHORITY\Servicio de red. Conversion failed when converting date and/or time from character string. [SQLSTATE 22007] (Error 241). The step failed.

He dado 20000 vueltas a los campos y ya no se que mas mirar, por favor necesito ayuda urgentemente.

Muchas gracias por vuestra ayuda y un saludo.
Manu


Citar  |  
Ver mensaje      

Isaias Islas González
Distrito Federal, Mé...
Escrito por Isaias Islas González el 20 de Octubre | Nivel Básico

Los datos fecha, deben ser ingresados en SQL Server, con formato ANSI

yyyymmdd hh:mm:ss,nnn

o bien:

yyyy-mm-dd hh:mm:ss,nnn

O tendrias que utilizar CAST/CONVERT para hacer dicha conversion


Citar  |  
Ver mensaje     

Manu Gonzalez Saez
Madrid, España
Escrito por Manu Gonzalez Saez el 20 de Octubre | Nivel Básico

El caso Isaias es que yo no tengo aceso a la vista de oracle original.
en la tabla destino los he dado el tipo datatime, los he revisado y todos los campos son de la forma: 29/05/2009 14:14:19

En el job le pongo esto:
DELETE FROM STC_INCIDENTS_TIME_ALL_V

GO

INSERT INTO STC_INCIDENTS_TIME_ALL_V

SELECT * FROM openquery(ATLANTIS,'SELECT * FROM STC_INCIDENTS_TIME_ALL_V WHERE INCIDENT_DATE >= add_months(sysdate,-1)')

GO

Gracias por la ayuda y un saludo.


Citar  |  
Ver mensaje     

Isaias Islas González
Distrito Federal, Mé...
Escrito por Isaias Islas González el 20 de Octubre | Nivel Básico

'SELECT * FROM STC_INCIDENTS_TIME_ALL_V'

El * debes cambiarlo por la lista de columnas

SELECT COL1, CAST(COL2 AS DATETIME).......


Citar  |  
Ver mensaje     

Isaias Islas González
Distrito Federal, Mé...
Escrito por Isaias Islas González el 20 de Octubre | Nivel Básico

No importa que no tengas acceso, en lugar de utilizar el *, debes mencionar las columnas de la vista y en la que sea fecha, hacer un simple:

-- CAST(COLx AS DATETIME)


Citar  |  
Ver mensaje     

Manu Gonzalez Saez
Madrid, España
Escrito por Manu Gonzalez Saez el 22 de Octubre | Nivel Básico

Hola Isaias,

Lo he probado pero ahora no parsea, me da este error:

===================================

The following errors were detected in the command text.

===================================

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

------------------------------
Program Location:

At Microsoft.SqlServer.Management. Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
at Microsoft.SqlServer.Management. Common.ServerConnection.ExecuteNonQuery(String sqlCommand)
at Microsoft.SqlServer.Management. SqlManagerUI.TSQLJobSubSystemDefinition.parse_Click(Object sender, EventArgs e)

===================================

An error occurred while preparing the query "SELECT OWNER, INCIDENT_NUMBER, INCIDENT_STATUS, SEVERITY, URGENCY, CUSTOMER_CONTACT, CUSTOMER_NUMBER, INCIDENT_TYPE, INCIDENT_CLASS, CUSTOMER_ACCOUNT, COVERED_ITEM, ORGANIZATION_NAME, SERIAL_NUMBER, CHANNEL, CAST(CLOSE_DATE AS DATETIME), HELPDESK_NUMBER, SUPPORT_SERVICE, INCIDENT_SUMMARY, SUBCUSTOMER_SITE, CONTRACT_NUMBER, LOGGED_BY, CAST(INCIDENT_DATE AS DATETIME), CAST(FIRST_NOTE_DATE AS DATETIME), CUSTOMER_NAME, SUBCUSTOMER, SLA_PASADO, ORG_ID, DEDICATED_TIME, RESPOND_TIME, CAST(LAST_UPDATE_DATE_SR AS DATETIME), CAST(TIEMPO_RESOLUCION AS DATETIME), CAST(NUEVA_FECHA_CREACION AS DATETIME), CAST(TPO_EN_PROCESO AS DATETIME) FROM STC_INCIDENTS_TIME_ALL_V WHERE INCIDENT_DATE >= add_months(sysdate,-1)" for execution against OLE DB provider "OraOLEDB. Oracle" for linked server "ATLANTIS".
OLE DB provider "OraOLEDB. Oracle" for linked server "ATLANTIS" returned message "ORA-00904: invalid column name".(. Net SqlClient Data Provider)

------------------------------
For help, click: Http://go.microsoft.com/fwlink? ProdName=Microsoft+SQL+Server&ProdVer=10.00.1600&EvtSrc=MSSQLServer&EvtID=7321&LinkId=20476

------------------------------
Server Name: PITAGOSAM
Error Number: 7321
Severity: 16
State: 2
Line Number: 2


------------------------------
Program Location:

At System.Data.SqlClient. SqlConnection. OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient. SqlInternalConnection. OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient. TdsParser. ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient. TdsParser. Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient. SqlCommand. RunExecuteNonQueryTds(String methodName, Boolean async)
at System.Data.SqlClient. SqlCommand. InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient. SqlCommand. ExecuteNonQuery()
at Microsoft.SqlServer.Management. Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)

Y como quedo el comando asi:

DELETE FROM STC_INCIDENTS_TIME_ALL_V

GO

INSERT INTO STC_INCIDENTS_TIME_ALL_V

SELECT * FROM openquery(ATLANTIS,'SELECT OWNER, INCIDENT_NUMBER, INCIDENT_STATUS, SEVERITY, URGENCY, CUSTOMER_CONTACT, CUSTOMER_NUMBER, INCIDENT_TYPE, INCIDENT_CLASS, CUSTOMER_ACCOUNT, COVERED_ITEM, ORGANIZATION_NAME, SERIAL_NUMBER, CHANNEL, CAST(CLOSE_DATE AS DATETIME), HELPDESK_NUMBER, SUPPORT_SERVICE, INCIDENT_SUMMARY, SUBCUSTOMER_SITE, CONTRACT_NUMBER, LOGGED_BY, CAST(INCIDENT_DATE AS DAT


Citar  |  
Ver mensaje     

Isaias Islas González
Distrito Federal, Mé...
Escrito por Isaias Islas González el 22 de Octubre | Nivel Básico

"ORA-00904: invalid column name"

Cuando haces un cast o convert, debes ponerle un nombre:

CAST(CLOSE_DATE AS DATETIME) as CLOSE_DATE


Citar  |  
Ver mensaje     

Manu Gonzalez Saez
Madrid, España
Escrito por Manu Gonzalez Saez el 24 de Octubre | Nivel Básico

Hola Isaias,

He probado añadiendo un solo campo y me da el siguiente error cuando parseo, con el * me parseaba correctamente, es posible que al realizar la transacion de oracle a SQL no sea compatible:

An exception occurred while executing a Transact-SQL statement or bath.

(Microsoft.SqlServer.ConnectionInfo)

Column name or number of supplied values does not match table definition. (Microsoft SQL Server, Error: 213)

Muchas gracias por la ayuda Isaias.
Manu.


Citar  |  
Ver mensaje     

Isaias Islas González
Distrito Federal, Mé...
Escrito por Isaias Islas González el 26 de Octubre | Nivel Básico
¿Conoces EXACTAMENTE el nombre de las columnas que se dieron en ORACLE?

Citar  |  
Ver mensaje     

Manu Gonzalez Saez
Madrid, España
Escrito por Manu Gonzalez Saez el 30 de Octubre | Nivel Básico

Hola Isaias,

Si el administrador de oracle me dio el nombre de las columnas e la vista a la que me dio aceso y el nombre de la vista tambien me le dio, STC_INCIDENTS_TIME_ALL_V.
Yo he llamado a mi tabla de SQL Server y a las columnas de la misma forma que me paso el administrador de oracle.

Puede ser que no este haciendo bien la transacion al ser una vista de oracle lo que uso y no una tabla?.

Muchas gracias por la ayuda Isaias.


Citar  |  
Ver mensaje     

Isaias Islas González
Distrito Federal, Mé...
Escrito por Isaias Islas González el 30 de Octubre | Nivel Básico

Es muy extraño, Oracle que yo sepa, maneja SQL-ANSI, deberia respetarte la nomenclatura

select columnas from tabla


Citar  |  
Ver mensaje     

Manu Gonzalez Saez
Madrid, España
Escrito por Manu Gonzalez Saez el 30 de Octubre | Nivel Básico

Puedo probar esa misma consulta en SQL fuera del job para hacer una especie de traza y ver justamente el campo qu eta fallando?.

Gracias.


Citar  |  
Ver mensaje     

Manu Gonzalez Saez
Madrid, España
Escrito por Manu Gonzalez Saez el 31 de Octubre | Nivel Básico

Hola Isaias,

Estos son los campos de la vista STC_INCIDENTS_TIME_ALL_V de oracle de la que quiero hacer la transacion a SQL Server:

Name Type Nullable
INCIDENT_NUMBER VARCHAR2(64) Y
CUSTOMER_NAME VARCHAR2(360) Y
CUSTOMER_NUMBER VARCHAR2(30) Y
CUSTOMER_ACCOUNT VARCHAR2(30) Y
SUBCUSTOMER VARCHAR2(240) Y
SUBCUSTOMER_SITE VARCHAR2(60) Y
INCIDENT_DATE DATE Y
TPO_RESOLUCION NUMBER Y
NUEVA_FECHA_CREACION DATE Y
TPO_EN_PROCESO DATE Y
SLA_PASADO VARCHAR2(1) Y
INCIDENT_TYPE VARCHAR2(30) Y
INCIDENT_CLASS VARCHAR2(50) Y
HELPDESK_NUMBER VARCHAR2(50) Y
FIRST_NOTE_DATE DATE Y
RESPOND_TIME NUMBER Y
DEDICATED_TIME NUMBER Y
OWNER VARCHAR2(360) Y
LOGGED_BY VARCHAR2(100) Y
CLOSE_DATE DATE Y
INCIDENT_STATUS VARCHAR2(30) Y
INCIDENT_SUMMARY VARCHAR2(80) Y
SEVERITY VARCHAR2(240) Y
URGENCY VARCHAR2(30) Y
CUSTOMER_CONTACT VARCHAR2(360) Y
CHANNEL VARCHAR2(50) Y
CONTRACT_NUMBER VARCHAR2(120) Y
SUPPORT_SERVICE VARCHAR2(40) Y
SERIAL_NUMBER VARCHAR2(30) Y
COVERED_ITEM VARCHAR2(40) Y
ORGANIZATION_NAME VARCHAR2(240) Y
ORG_ID NUMBER Y
LAST_UPDATE_DATE_SR DATE Y

los varchar2 yo los tengo como varchar y los date yo los tengo como datetime.
El date origen es de la siguiente

Citar  |  
Ver mensaje     

Isaias Islas González
Distrito Federal, Mé...
Escrito por Isaias Islas González el 3 de Noviembre | Nivel Básico

Si ejecutas un:

SELECT INCIDENT_NUMBER, TOMER_NAME
FROM TuLinkedServer. TuBase.. TuVista

¿Funciona?


Citar  |  
Ver mensaje     

Manu Gonzalez Saez
Madrid, España
Escrito por Manu Gonzalez Saez el 3 de Noviembre | Nivel Básico

SELECT


INCIDENT_NUMBER , CUSTOMER_NAME

FROM


iSupport . dbo . STC_INCIDENTS_TIME_ALL_V

asi si que funciona Isaias


Citar  |  
Ver mensaje     

Manu Gonzalez Saez
Madrid, España
Escrito por Manu Gonzalez Saez el 3 de Noviembre | Nivel Básico

Pero claro no muestra ningun dato porque esta tabla esta vacia debido a que todavia no hemos traido datos a esta tabla de la otra tabla de oracle


Citar  |  
Ver mensaje     

Manu Gonzalez Saez
Madrid, España
Escrito por Manu Gonzalez Saez el 3 de Noviembre | Nivel Básico



Select * from openquery ( atlantis , 'select * from STC_INCIDENTS_TIME_ALL_V where INCIDENT_DATE >= add_months(sysdate,-1)' )

esto funciona bien, Isaias por lo tanto estamos obteniendo bien los datos de oracle.
Pero cuando pongo el insert es cuando sale el error de la conversion de tipos:

insert


esto funciona bien, Isaias por lo tanto estamos obteniendo bien los datos de oracle.
Pero cuando pongo el insert es cuando sale el error de la conversion de tipos:

insert


esto funciona bien, Isaias por lo tanto estamos obteniendo bien los datos de oracle.
Pero cuando pongo el insert es cuando sale el error de la conversion de tipos:

insert


into iSupport . dbo . STC_INCIDENTS_TIME_ALL_V

Select


* from openquery ( atlantis , 'select * from STC_INCIDENTS_TIME_ALL_V where INCIDENT_DATE >= add_months(sysdate,-1)' )

Go

el error que da es este:

Msg 241, Level 16, State 1, Line 1

Conversion failed when converting date and/or time from character string.

Gracias y un saludo.


Citar  |  
Ver mensaje     

Isaias Islas González
Distrito Federal, Mé...
Escrito por Isaias Islas González el 5 de Noviembre | Nivel Básico

Si, porque deberias poder hacer mencion a las columnas y aquellas que fueran de tipo fecha, hacer un CAST(Tucolumna as datetime)


Citar  |  
Ver mensaje     

Manu Gonzalez Saez
Madrid, España
Escrito por Manu Gonzalez Saez el 10 de Noviembre | Nivel Básico

Hola Isaias,

Pues gracias a esto que me digiste fui poniendo campo por campo ca da uno de ellos y probando si funcionaba ok hasta que dimos con los campos que estaban mal, uno era por el tipo y otro por el nombre que no estaba ok.
Total que ya extraigo bien los datos de oracle con el job.
Ahora tengo un problema con como hacer que esos datos se actualicen cada poco tiempo, el job le he puesto para que se ejecute todos los dias a las 12 de la noche esto queire decir que de doce a doce tendre siempre los mismos datos en la tabla?.
Entonces para que la tabla se actualice cada hora por ejemplo, tengo que poner que el job se ejecute cada hora?.

Muchas gracias por tu ayuda y un saludo.

Manu.


Citar  |  
Ver mensaje     

Isaias Islas González
Distrito Federal, Mé...
Escrito por Isaias Islas González el 10 de Noviembre | Nivel Básico

Felicidades por resolver el primer caso.

En cuanto a la actualizacion, es tan facil como que si tengo 2 tablas A y B, deseo insertar en A, lo que este en B y no exista en A.

INSERT INTO A
SELECT * FROM A as t1 WHERE NOT EXISTS(SELECT * FROM B t2 WHERE t1. Id = t2. Id)


Citar  |  
Ver mensaje     


Responder


Quiero recibir alertas por email cuando haya mensajes nuevos en este debate

Al escribir en el debate:
  1. Repasa la ortografía y no escribas en formato SMS.
  2. Lee el texto dos veces antes de publicar.
  3. No escribas todo en mayúsculas o negritas.
 
Páginas internacionales: España  |  Italia  |  Francia  |  México  |  Alemania  |  Reino Unido  |  Argentina  |  Chile  |  Colombia  |  USA

Búsquedas frecuentes: coeficiente de pearson como hacer caricaturas porque aullan los perros evolucion de los instrumentos musicales malcolm saville

Emagister cumple la Ley Orgánica 15/1999 de 13 de diciembre, de Protección de datos de Carácter Personal, y posee el código de inscripción nº 2002010053 del Registro General de la Agencia de Protección de Datos. Copyright © 1999/2000 - Grupo Intercom - Todos los derechos