복붙노트

[SQL] 열 이름 제공된 값의 개수 나 테이블 정의와 일치하지 않습니다

SQL

열 이름 제공된 값의 개수 나 테이블 정의와 일치하지 않습니다

SQL 서버, 나는 쿼리 아래를 사용하여 다른 하나 개의 테이블에서 값을 삽입하는 것을 시도하고있다 :

delete from tblTable1

insert into tblTable1 select * from tblTable1_Link

나는 다음과 같은 오류가 점점 오전 :

나는 두 테이블이 동일한 구조, 동일한 열 이름과 같은 데이터 유형이 있음을 확신합니다.

도와주세요!

해결법

  1. ==============================

    1.그들은 동일한 구조를 가지고 있지 않습니다 ... 나는 그들이 다른 보장 할 수

    그들은 동일한 구조를 가지고 있지 않습니다 ... 나는 그들이 다른 보장 할 수

    나는 'tbltable1'라는 개체가 데이터베이스에 이미 있습니다 ... 당신이 이미 그것을 만든 알고

    당신이 할 수 있습니다하면이 (또한 다른 문제를 해결하는)입니다 :

    Drop table tblTable1
    
    select * into tblTable1 from tblTable1_Link
    
  2. ==============================

    2.삽입 것이 열 이름이 볼 수있는 다음을 지정하는 것이 낫다

    삽입 것이 열 이름이 볼 수있는 다음을 지정하는 것이 낫다

    DECLARE @Table TABLE(
            Val1 VARCHAR(MAX)
    )
    
    INSERT INTO @Table SELECT '1'
    

    원인 오류에 데프 테이블을 변경, 벌금을 작동

    DECLARE @Table TABLE(
            Val1 VARCHAR(MAX),
            Val2 VARCHAR(MAX)
    )
    
    INSERT INTO @Table SELECT '1'
    

    그러나 위의 변경

    DECLARE @Table TABLE(
            Val1 VARCHAR(MAX),
            Val2 VARCHAR(MAX)
    )
    
    INSERT INTO @Table (Val1)  SELECT '1'
    

    공장. 열을 지정하여 좀 더 구체적으로해야합니다

    구조를 제공하고 우리는 모양을 가질 수있다

  3. ==============================

    3.이것은 이전 게시물입니다 그러나 나는 또한 언급 할 당신 같은 뭔가가있는 경우

    이것은 이전 게시물입니다 그러나 나는 또한 언급 할 당신 같은 뭔가가있는 경우

    insert into blah
           select * from blah2
    

    어쩌구 및 blah2은 계산 열이 같은 오류가 발생합니다 있다는 점에서 동일 킵은 ...

    위의 실패했을 때 난 그냥 것을 깨달았다 나는 시도

    insert into blah (cola, colb, colc)
           select cola, colb, colc from blah2
    

    내 예에서 그것은 (첫 번째와 마지막 등에서 계산) 전체 이름 필드했다

  4. ==============================

    4.문제는 당신이 열을 사용하지 않고 데이터베이스에 데이터를 삽입하려고하는 것입니다. SQL Server는 당신에게 그 오류 메시지를 제공합니다.

    문제는 당신이 열을 사용하지 않고 데이터베이스에 데이터를 삽입하려고하는 것입니다. SQL Server는 당신에게 그 오류 메시지를 제공합니다.

    오류 : 사용자 값으로 삽입 ( '1', '2'는 '3') - 이것은 당신이 단 3 열이 길이로 잘 작동합니다

    당신은 4 열이 있지만 그 중 3에 삽입 할 경우

    올바른 : 사용자 (이름, 성, 도시) 값으로 삽입 ( '톰', '존스', '마이애미')

    도움이 되었기를 바랍니다

  5. ==============================

    5.내가 실행중인 로그를 유지하고있어 이후 테이블을 제거하면, 나를 위해 옵션이 아니었다. 내가 삽입 할 필요 때마다 내가 드롭 한 경우, 테이블은 의미가 될 것이다.

    내가 실행중인 로그를 유지하고있어 이후 테이블을 제거하면, 나를 위해 옵션이 아니었다. 내가 삽입 할 필요 때마다 내가 드롭 한 경우, 테이블은 의미가 될 것이다.

    나는이 내 문제를 해결 변경, 다른 컬럼의 제품이었다 테이블을 생성 문에서 몇 열을했기 때문에 내 오류가 있었다. 예를 들어,

    create table foo (
    field1 as int
    ,field2 as int
    ,field12 as field1 + field2 )
    
    create table copyOfFoo (
    field1 as int
    ,field2 as int
    ,field12 as field1 + field2)  --this is the problem, should just be 'as int'
    
    insert into copyOfFoo
    SELECT * FROM foo
    
  6. ==============================

    6.계산 된 열은 문제를 확인하십시오. SELECT *를 사용하지 마십시오. 당신은 계산 필드를 제외하고 SELECT 후 각 필드를 지정해야합니다

    계산 된 열은 문제를 확인하십시오. SELECT *를 사용하지 마십시오. 당신은 계산 필드를 제외하고 SELECT 후 각 필드를 지정해야합니다

  7. ==============================

    7.난 당신이 좋은 해결책을 발견 바랍니다. 저도 같은 문제가 있었는데, 나는 그것을 해결할 방법은 아마 최고는 아니지만 지금은 노력하고 있습니다.

    난 당신이 좋은 해결책을 발견 바랍니다. 저도 같은 문제가 있었는데, 나는 그것을 해결할 방법은 아마 최고는 아니지만 지금은 노력하고 있습니다.

    그것은 연결된 서버를 생성하고 동적 SQL 사용하는 것 -하지 최선을하지만 사람이 더 나은, 제발 코멘트 / 답을 무언가를 제안 할 수 있습니다합니다.

    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
    

    이 지금 나를 위해 노력하고 있습니다. 나는 열 수를 보장하고 저장 프로 시저에 의해 반환 된 열로 입력 할 수있는 것은 내가 저장 프로 시저에서 동일한 테이블을 돌아 간단하기 때문에,이 표에서와 동일합니다.

    감사와 안부 마르셀로

  8. ==============================

    8.나를 위해 범인 INT 값 급여에 할당

    나를 위해 범인 INT 값 급여에 할당

    종업원에 삽입 (ID, 이름, 성, 성별, 급여) 값 (3, '캐나다', 'PA', 'm'을, 15,000)

    급여 열에서 우리는 컴파일러가 15과 000 이해 15,000 할당 할 때.

    이 수정 나를 위해 잘 작동합니다. 종업원에 삽입 (ID, 이름, 성, 성별, 연봉) 값 (4 'US', 'SAM', 'm'을 15000)

  9. ==============================

    9.SQL 서버에 업데이트 / 2017 2016 / ... 우리는 가져 오기 및 내보내기 데이터베이스 장소에서 일부 저장 프로 시저가 있습니다. 우리가를 만들 곳에 우리가 (다른 것들 사이에) 사용하는 SP에서 디스크에서 FILELISTONLY 복원 파일에서 복원을위한 테이블 "#restoretemp".

    SQL 서버에 업데이트 / 2017 2016 / ... 우리는 가져 오기 및 내보내기 데이터베이스 장소에서 일부 저장 프로 시저가 있습니다. 우리가를 만들 곳에 우리가 (다른 것들 사이에) 사용하는 SP에서 디스크에서 FILELISTONLY 복원 파일에서 복원을위한 테이블 "#restoretemp".

    SQL 서버 2016로, MS는 필드 SnapshotURL의 NVARCHAR (360) 오류 메시지가 발생했습니다 무엇을 (푸른 URL 복원)를 추가했다. 나는 추가 필드를 개선 한 후, 다시 근무하고 복원 할 수 있습니다. 코드 (마지막 필드 참조) 냈다 :

     SET @query = 'RESTORE FILELISTONLY FROM DISK = ' + QUOTENAME(@BackupFile , '''')
    CREATE TABLE #restoretemp
    (
    LogicalName nvarchar(128)
    ,PhysicalName nvarchar(128)
    ,[Type] char(1)
    ,FileGroupName nvarchar(128)
    ,[Size] numeric(20,0)
    ,[MaxSize] numeric(20,0)
    ,FileID bigint
    ,CreateLSN numeric(25,0)
    ,DropLSN numeric(25,0) NULL
    ,UniqueID uniqueidentifier
    ,ReadOnlyLSN numeric(25,0)
    ,ReadWriteLSN numeric(25,0)
    ,BackupSizeInByte bigint
    ,SourceBlockSize int
    ,FilegroupID int
    ,LogGroupGUID uniqueidentifier NULL
    ,DifferentialBaseLSN numeric(25,0)
    ,DifferentialbaseGUID uniqueidentifier
    ,IsReadOnly bit
    ,IsPresent bit
    ,TDEThumbprint varbinary(32)
    -- Added field 01.10.2018 needed from SQL Server 2016 (Azure URL)
    ,SnapshotURL nvarchar(360)
    )
    
    INSERT #restoretemp EXEC (@query)
    SET @errorstat = @@ERROR
    if @errorstat <> 0 
    Begin
    if @Rueckgabe = 0 SET @Rueckgabe = 6
    End
    Print @Rueckgabe
    
  10. ==============================

    10.트리거 조심하십시오. 어쩌면 문제는 삽입 된 행에 대한 트리거에서 일부 작동을합니다.

    트리거 조심하십시오. 어쩌면 문제는 삽입 된 행에 대한 트리거에서 일부 작동을합니다.

  11. ==============================

    11.당신의 ID를 확인합니다. 그것은 정체성인가? 이 있는지 확인 후 인 경우는 ID NOT NULL 신원 (1,1)로 선언

    당신의 ID를 확인합니다. 그것은 정체성인가? 이 있는지 확인 후 인 경우는 ID NOT NULL 신원 (1,1)로 선언

    그리고 테이블, 드롭 테이블을 생성하고 전에 테이블을 만듭니다.

  12. from https://stackoverflow.com/questions/1152932/column-name-or-number-of-supplied-values-does-not-match-table-definition by cc-by-sa and MIT license