update not into exist else ejemplos dont sql sql-server

not - Insertar SQL dependiendo si existe una columna



mysql insert if not exists else update (4)

Necesito hacer un INSERT u otro dependiendo de si existe una columna debido a las diferentes versiones de la misma tabla.

Hice el enfoque en este hilo, pero la comprobación previa o "tipo de compilación" de SQL Server detecta un error que no fallaba durante el tiempo de ejecución.

Aquí hay un código

IF COL_LENGTH(''TableA'', ''Column2'') IS NOT NULL BEGIN INSERT INTO [dbo].[TableA]([Column1], [Column2], [Column3], [Column4]) SELECT value1, value2, value3, value4 END ELSE BEGIN INSERT INTO [dbo].[TableA]([Column1], [Column3], [Column4]) SELECT value1, value3, value4 END

Cualquier solución?


En lugar de abordar esto dinámicamente, crearía procedimientos almacenados con una firma común y agregaría la versión apropiada a sus diversas versiones de la base de datos

p.ej:

create proc TableAInsert ( @col1 int, @col2 int, @col3 int, @col4 int )

De esta manera, creará una definición de interface para su base de datos.

Si su base de datos vuelve a cambiar, puede crear una nueva versión de este procedimiento con un parámetro opcional con un valor predeterminado y seguir llamándolo de la misma manera que antes.


SQL sabrá que la columna no existe, por lo que no le permitirá ejecutar la consulta. La solución sería ejecutar una consulta dinámica.

DECLARE @value1 AS VARCHAR(50) DECLARE @value2 AS VARCHAR(50) DECLARE @value3 AS VARCHAR(50) DECLARE @value4 AS VARCHAR(50) SET @value1 = ''somevalue1'' SET @value2 = ''somevalue2'' SET @value3 = ''somevalue3'' SET @value4 = ''somevalue4'' DECLARE @SQL AS VARCHAR(MAX) IF COL_LENGTH(''TableA'', ''Column2'') IS NOT NULL BEGIN SET @SQL = ''INSERT INTO [dbo].[TableA]([Column1], [Column2], [Column3], [Column4]) SELECT '' + @value1 + '', '' + @value2 + '', '' + @value3 + '', '' + @value4 END ELSE BEGIN SET @SQL = ''INSERT INTO [dbo].[TableA]([Column1], [Column3], [Column4]) SELECT '' + @value1 + '', '' + @value3 + '', '' + @value4 END EXEC(@SQL)


Verifique si existe la Columna2 de la TablaA utilizando INFORMATION_SCHEMA.COLUMNS y úsela en su consulta original para cambiar entre las 2 inserciones


IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''TABLEA'' AND COLUMN_NAME = ''COLUMNNAME'') BEGIN IF COL_LENGTH(''TableA'', ''Column2'') IS NOT NULL BEGIN INSERT INTO [dbo].[TableA]([Column1], [Column2], [Column3], [Column4]) SELECT value1, value2, value3, value4

Verifique primero si la columna existe o no, luego verifique su longitud. Sin embargo, no veo nada malo en la comprobación por COL_LENGTH .

-Espero eso ayude .