Column name or number of supplied values does not match table definition

前端 未结 12 1826
轮回少年
轮回少年 2020-11-29 04:33

In SQL server, I am trying to insert values from one table to another by using the below query:

delete from tblTable1

insert into tblTable1 select * from tb         


        
12条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-29 05:12

    I hope you have found a good solution. I had the same problem, and the way I worked around it is probably not the best but it is working now.

    it involves creating a linked server and using dynamic sql - not the best, but if anyone can suggest something better, please comment/answer.

    declare @sql nvarchar(max)
    
    
    DECLARE @DB_SPACE TABLE (
    [DatabaseName] NVARCHAR(128) NOT NULL,
    [FILEID] [smallint] NOT NULL,
    [FILE_SIZE_MB] INT NOT NULL DEFAULT (0),
    [SPACE_USED_MB] INT NULL DEFAULT (0),
    [FREE_SPACE_MB] INT NULL DEFAULT (0),
    [LOGICALNAME] SYSNAME NOT NULL,
    [DRIVE] NCHAR(1) NOT NULL,
    [FILENAME] NVARCHAR(260) NOT NULL,
    [FILE_TYPE] NVARCHAR(260) NOT NULL,
    [THE_AUTOGROWTH_IN_KB] INT NOT NULL DEFAULT(0)
    ,filegroup VARCHAR(128)
    ,maxsize VARCHAR(25)
    
    PRIMARY KEY CLUSTERED ([DatabaseName] ,[FILEID] )
    )  
    
    
    SELECT @SQL ='SELECT [DatabaseName],
            [FILEID],
            [FILE_SIZE_MB],
            [SPACE_USED_MB],
            [FREE_SPACE_MB],
            [LOGICALNAME],
            [DRIVE],
            [FILENAME],
            [FILE_TYPE],
            [THE_AUTOGROWTH_IN_KB]
            ,filegroup
            ,maxsize FROM OPENQUERY('+ QUOTENAME('THE_MONITOR') + ','''+ ' EXEC MASTER.DBO.monitoring_database_details '  +''')'
    exec sp_executesql @sql
    
    
          INSERT INTO @DB_SPACE(
                                [DatabaseName],
                                [FILEID],
                                [FILE_SIZE_MB],
                                [SPACE_USED_MB],
                                [FREE_SPACE_MB],
                                [LOGICALNAME],
                                [DRIVE],
                                [FILENAME],
                                [FILE_TYPE],
                                THE_AUTOGROWTH_IN_KB,
                                [filegroup],
                                maxsize
                              )
    
          EXEC SP_EXECUTESQL @SQL
    

    this is working for me now. I can guarantee the number of columns and type of columns returned by the stored procedure are the same as in this table, simply because I return the same table from the stored procedure.

    thanks and regards marcelo

提交回复
热议问题