SQL 插入取决于列是否存在

标签 sql sql-server

由于同一表的不同版本,我需要执行一个或另一个 INSERT,具体取决于列是否存在。

我在 this thread 上进行了该方法但是 SQL Server 的预检查或“某种编译”检测到的错误在执行期间不会失败。

这是一些代码

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

有什么解决办法吗?

最佳答案

SQL 会知道该列不存在,因此它不会让您运行查询。解决方案是执行动态查询。

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)

关于SQL 插入取决于列是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18353367/

相关文章:

sql-server - 检索同一个表中的两条记录并在一个查询中获取 datediff

mysql - 堆叠式 SQL 查询错误和并发症

sql-server - SQL Server : What locale should be used to format numeric values into SQL Server format?

sql - 无法直接转换为十进制值?

mysql - 选择找到条目 'x' 的 ID 和 COLUMN_NAME

sql-server - 一对多返回单行

sql - 在显示唯一行的单个表中进行查询

mysql - 在sql中比较同一个表中的两列时如何选择

mysql - 行级锁,或者读时锁

sql - Ms Sql Server 将数字列与字符串值进行比较