SQL server 判断表中是否有字段

由于不能保证所有环境中的 kuout 表都包含 [Mtype] 字段,我们需要动态判断该字段是否存在 ,如果存在就包含它,否则用 NULL 或默认值代替。


✅ 推荐解决方案:使用动态 SQL + 信息架构(INFORMATION_SCHEMA)

你可以修改你的 SQL 脚本,在构建 @Sql44 之前,先检查 @DatabaseName.dbo.kuout 是否包含 [Mtype] 字段,然后动态生成 SELECT 列表。

复制代码
BEGIN TRY

	    DECLARE @HasMtype BIT = 0
		DECLARE @CheckSql NVARCHAR(MAX)

		-- 构建动态 SQL 检查字段是否存在
		SET @CheckSql = N'
			IF EXISTS (
				SELECT 1 
				FROM ' + QUOTENAME(@DatabaseName) + N'.INFORMATION_SCHEMA.COLUMNS 
				WHERE TABLE_SCHEMA = N''dbo'' 
				  AND TABLE_NAME = N''kuout'' 
				  AND COLUMN_NAME = N''Mtype''
			)
			BEGIN
				SET @HasMtypeOUT = 1
			END
			ELSE
			BEGIN
				SET @HasMtypeOUT = 0
			END
		'

		-- 执行动态 SQL 并获取输出参数
		EXEC sp_executesql 
			@CheckSql, 
			N'@HasMtypeOUT BIT OUTPUT', 
			@HasMtypeOUT = @HasMtype OUTPUT  

        DECLARE @Sql44 NVARCHAR(MAX)
		IF @HasMtype = 1
			SET @Sql44 = N'
			INSERT INTO dbo.ods_kuout_ext ([ord],[title],[ckbh],[ck],[date3],[date5],[intro],[complete1],[fh1],[order1],[intro2],[cateid],[cateid2],[cateid3],[del],[cateout],[delcate],[deldate],[date7],[kg],[kgs],[sort1],[IsMinusKuout],[zdy1],[zdy2],[zdy3],[zdy4],[zdy5],[zdy6],[source],[fromid],[status],[QualityType],[QualityUsers],[FactQualityUsers],[QualityResult],[QualityDate],[AddQualityDate],[AddQualityUser],[QualityRemark],[ModifyStamp],[alt],[receiver],[phone],[mobile],[address],[zip],[areaId],[kuout],[IsHC],[IsWeight],[CarNum],[IsTempSave],[Mtype],[dt])
            SELECT [ord]
			,[title]
			,[ckbh]
			,[ck]
			,[date3]
			,[date5]
			,[intro]
			,[complete1]
			,[fh1]
			,[order1]
			,[intro2]
			,[cateid]
			,[cateid2]
			,[cateid3]
			,[del]
			,[cateout]
			,[delcate]
			,[deldate]
			,[date7]
			,[kg]
			,[kgs]
			,[sort1]
			,[IsMinusKuout]
			,[zdy1]
			,[zdy2]
			,[zdy3]
			,[zdy4]
			,[zdy5]
			,[zdy6]
			,[source]
			,[fromid]
			,[status]
			,[QualityType]
			,[QualityUsers]
			,[FactQualityUsers]
			,[QualityResult]
			,[QualityDate]
			,[AddQualityDate]
			,[AddQualityUser]
			,[QualityRemark]
			,[ModifyStamp]
			,[alt]
			,[receiver]
			,[phone]
			,[mobile]
			,[address]
			,[zip]
			,[areaId]
			,[kuout]
			,[IsHC]
			,[IsWeight]
			,[CarNum]
			,[IsTempSave]
			,[Mtype]
			,' + QUOTENAME(CONVERT(NVARCHAR(10), @DateThreshold, 120), '''') + N'as dt FROM' + QUOTENAME(@DatabaseName) + N'.[dbo].[kuout]'
		ELSE
			SET @Sql44 = N'
			INSERT INTO dbo.ods_kuout_ext ([ord],[title],[ckbh],[ck],[date3],[date5],[intro],[complete1],[fh1],[order1],[intro2],[cateid],[cateid2],[cateid3],[del],[cateout],[delcate],[deldate],[date7],[kg],[kgs],[sort1],[IsMinusKuout],[zdy1],[zdy2],[zdy3],[zdy4],[zdy5],[zdy6],[source],[fromid],[status],[QualityType],[QualityUsers],[FactQualityUsers],[QualityResult],[QualityDate],[AddQualityDate],[AddQualityUser],[QualityRemark],[ModifyStamp],[alt],[receiver],[phone],[mobile],[address],[zip],[areaId],[kuout],[IsHC],[IsWeight],[CarNum],[IsTempSave],[dt])
            SELECT [ord]
			,[title]
			,[ckbh]
			,[ck]
			,[date3]
			,[date5]
			,[intro]
			,[complete1]
			,[fh1]
			,[order1]
			,[intro2]
			,[cateid]
			,[cateid2]
			,[cateid3]
			,[del]
			,[cateout]
			,[delcate]
			,[deldate]
			,[date7]
			,[kg]
			,[kgs]
			,[sort1]
			,[IsMinusKuout]
			,[zdy1]
			,[zdy2]
			,[zdy3]
			,[zdy4]
			,[zdy5]
			,[zdy6]
			,[source]
			,[fromid]
			,[status]
			,[QualityType]
			,[QualityUsers]
			,[FactQualityUsers]
			,[QualityResult]
			,[QualityDate]
			,[AddQualityDate]
			,[AddQualityUser]
			,[QualityRemark]
			,[ModifyStamp]
			,[alt]
			,[receiver]
			,[phone]
			,[mobile]
			,[address]
			,[zip]
			,[areaId]
			,[kuout]
			,[IsHC]
			,[IsWeight]
			,[CarNum]
			,[IsTempSave]
			,' + QUOTENAME(CONVERT(NVARCHAR(10), @DateThreshold, 120), '''') + N'as dt FROM' + QUOTENAME(@DatabaseName) + N'.[dbo].[kuout]'
        

		SET @Sql44 = REPLACE(@Sql44, '@DateThreshold', @DateThreshold)
		EXEC sp_executesql @Sql44

    END TRY


    BEGIN CATCH

        DECLARE @ErrorMessage44 NVARCHAR(4000)
        SET @ErrorMessage44 = ERROR_MESSAGE()

        RAISERROR (@ErrorMessage44, 16, 1)

    END CATCH
相关推荐
山岚的运维笔记18 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
Traced back2 天前
SQL Server 核心语法+进阶知识点大全(小白版)
数据库·sqlserver
山岚的运维笔记2 天前
SQL Server笔记 -- 第14章:CASE语句
数据库·笔记·sql·microsoft·sqlserver
松涛和鸣2 天前
70、IMX6ULL LED驱动实战
linux·数据库·驱动开发·postgresql·sqlserver
UpYoung!2 天前
【SQL Server 2019】企业级数据库系统—数据库SQL Server 2019保姆级详细图文下载安装完全指南
运维·数据库·sqlserver·运维开发·数据库管理·开发工具·sqlserver2019
知识分享小能手2 天前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 数据表的操作 —语法详解与实战案例(3)
数据库·学习·sqlserver
知识分享小能手3 天前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
山岚的运维笔记3 天前
SQL Server笔记 -- 第15章:INSERT INTO
java·数据库·笔记·sql·microsoft·sqlserver
山岚的运维笔记3 天前
SQL Server笔记 -- 第16章:MERGE
java·笔记·sql·microsoft·sqlserver
奥特曼打小白3 天前
Microsoft SQL Server2025的下载、安装与配置——从环境、管理工具、配置管理器入手,解决VS2022ASP.NET网站项目中SqlDataSource控件找不到服务器的问题
sqlserver·asp.net