Foros aprenderaprogramar.com

Aprender a programar => De todo un poco... => Mensaje iniciado por: Eva en 10 de Julio 2013, 00:04

Título: SQL Server No se permite conversión implícita del tipo datos sql_variant a int
Publicado por: Eva en 10 de Julio 2013, 00:04
Tengo el siguiente fragmento de consulta dentro de un Procedimiento:


BEGIN
INSERT INTO FORMATOINICIAL(NOMBRETABLA,OBJECTID,NOMBRECOL,FECALTER,IDSEED,TIPOIDENTITY,VALORDEFAULT)

SELECT ISC.TABLE_NAME,
          ST.object_id,
          ISC.COLUMN_NAME,
          ST.modify_date,
           ISC.IS_NULLABLE,
         sic.seed_value,
           sic.is_identity,
           ISC.COLUMN_DEFAULT
           FROM INFORMATION_SCHEMA.COLUMNS AS ISC
           INNER JOIN sys.tables AS ST ON ISC.TABLE_NAME=ST.name
         left join sys.identity_columns sic on ST.object_id = sic.object_id
            WHERE ISC.TABLE_SCHEMA = @esquema AND ISC.TABLE_NAME=@nombretabla
END

Pero me genera un error:
"No se permite la conversión implícita del tipo de datos sql_variant a int. Utilice la función CONVERT para ejecutar esta consulta."cuando lo ejecuto.. ¿Alguien sabe donde deberia incluir el CONVERT? Probe de varias formas y no logro solucionarlo
Título: Re:Auditar tablas en SQL Server
Publicado por: Mastermind en 10 de Julio 2013, 14:58
Habría que mirar:

¿Qué formato tienen estos campos de FORMATOINICIAL:
NOMBRETABLA
OBJECTID
NOMBRECOL
FECALTER
IDSEED
TIPOIDENTITY
VALORDEFAULT
?

¿Qué formato tienen estos de las otras dos tablas:
ISC.TABLE_NAME
ST.object_id
ISC.COLUMN_NAME
ST.modify_date
ISC.IS_NULLABLE
sic.seed_value
sic.is_identity
ISC.COLUMN_DEFAULT
?

¿Si ejecutas esta consulta:

Código: [Seleccionar]
SELECT ISC.TABLE_NAME,
          ST.object_id,
          ISC.COLUMN_NAME,
          ST.modify_date,
           ISC.IS_NULLABLE,
         sic.seed_value,
           sic.is_identity,
           ISC.COLUMN_DEFAULT
           FROM INFORMATION_SCHEMA.COLUMNS AS ISC
           INNER JOIN sys.tables AS ST ON ISC.TABLE_NAME=ST.name
         left join sys.identity_columns sic on ST.object_id = sic.object_id
            WHERE ISC.TABLE_SCHEMA = @esquema AND ISC.TABLE_NAME=@nombretabla

obtienes el resultado esperado?

Otra opción sería pensar en una copia de tablas y modificación del tipo de datos, pero esto solo lo pensaría si estuvieras hablando de pocos datos (cien ó mil) si estás con miles de datos no lo veo razonable.