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
相关推荐
2501_941878743 天前
边缘计算与云计算:携手应对数字化转型的挑战
sqlserver
2501_941148613 天前
边缘计算与物联网:开启智能互联的新纪元
sqlserver
2501_941810833 天前
人工智能与金融科技:重塑未来的金融服务
sqlserver
2501_941865633 天前
Python Scrapy高并发分布式爬虫设计与实战经验分享:沈阳电商数据采集与实时价格监控落地
sqlserver
Hello.Reader5 天前
Flink CDC 用 SqlServer CDC 实时同步数据到 Elasticsearch
elasticsearch·sqlserver·flink
合作小小程序员小小店5 天前
网页开发,在线%宠物论坛管理%系统,基于eclipse,html,css,jquery,servlet,jsp,sql server数据库。
java·sqlserver·eclipse·jdk·html·intellij-idea
2501_941623327 天前
数字化转型中的数据隐私:保护用户信息的关键策略
sqlserver
Hello.Reader9 天前
从 CDC 到实时数据流Flink SQLServer CDC Connector 实战
大数据·sqlserver·flink
if_else人生10 天前
数字化转型:5G与工业互联网的融合推动未来制造业
sqlserver