sql-server - 临时表、列名称或提供的值的数量与表定义不匹配

标签 sql-server t-sql

尽管这看起来像是重复的,但我不得不发布它,因为我似乎无法发现错误。

我不知道我是生气还是怎么的,但我似乎无法找出为什么提供的值的数量不匹配。

它们是:

   CREATE TABLE #TIPSTOPE_TS
        (
          TIP INT NULL,
          SIFVAL VARCHAR(5),
          GRUPA INT NULL,
          DATUMOD VARCHAR(15),
          PASIVNA DECIMAL(15,4) NULL DEFAULT(0),      
          REDOVNA DECIMAL(15,4) NULL DEFAULT(0),      
          ZATEZNA DECIMAL(15,4) NULL DEFAULT(0), 
          STOPA DECIMAL(15,4) NULL DEFAULT(0),
          DATUMDO VARCHAR(15),
          KONTO VARCHAR(15),


        )
         INSERT INTO #TIPSTOPE_TS
         SELECT TS.TIP,
                TS.SIFVAL,
                TS.GRUPA,
                CASE WHEN ISDATE(MAX(TS.DATUMOD)) = 0 THEN '2017.12.31' ELSE MAX(TS.DATUMOD) END AS DATUMOD,                           
                      CAST (2 AS DECIMAL(10,4)) AS PASIVNA,                           
                      CAST (1 AS DECIMAL(10,4)) AS REDOVNA,                           
                      CAST (3 AS DECIMAL(10,4)) AS ZATEZNA,
                        TS.REDOVNA,  
                        TS.DATUMDO,  
                        TP.M1 AS KONTO
         FROM TIPSTOPE TS WITH(NOLOCK)
         JOIN TIPPART TP WITH(NOLOCK) ON TP.TIP = TS.TIP
         WHERE TS.DATUMOD <= '2017.12.31'
         GROUP BY TS.TIP,TS.SIFVAL,TS.GRUPA,TP.M1,TS.DATUMDO,TS.REDOVNA

         CREATE NONCLUSTERED INDEX IX_TIPSTOPE_TS ON #TIPSTOPE_TS (TIP, GRUPA, SIFVAL)
                INCLUDE (DATUMOD)

还有第二个...

 CREATE TABLE #UNPVT_TIPSTOPE_TS      
            (      
                  TIP INT NULL,        
                  SIFVAL VARCHAR(5) NULL,       
                  GRUPA INT NULL,       
                  DATUMOD VARCHAR(10) NULL,       
                  TIP_KS VARCHAR(15) NULL,       
                  KAMATNA_STOPA DECIMAL(15,4) NULL DEFAULT(0),
                  DATUMDO VARCHAR(10) NULL,  
            )           

            INSERT INTO #UNPVT_TIPSOPE_TS      
            SELECT TIP, SIFVAL, GRUPA, DATUMOD, TIP_KS, KAMATNA_STOPA,DATUMDO   
            FROM         
            (      
                  SELECT TIP, SIFVAL, GRUPA, DATUMOD, ISNULL(REDOVNA,0) AS REDOVNA, ISNULL(PASIVNA,0) AS PASIVNA, ISNULL(ZATEZNA,0) AS ZATEZNA,STOPA,DATUMDO
                  FROM #TIPSTOPE_TS      
            ) P      
           UNPIVOT (KAMATNA_STOPA FOR TIP_KS IN (REDOVNA, PASIVNA, ZATEZNA)) AS UNPVT  

第二个临时表正在从第一个临时表获取数据。

当我尝试创建第二个错误时抛出:

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

最佳答案

您正在指定所需值的确切数量。如果您将整个代码复制到新的查询窗口中并执行它,它将起作用。或者在当前窗口中拖放表格:

DROP TABLE #TIPSTOPE_TS;
DROP TABLE #UNPVT_TIPSTOPE_TS;

我的意思是只执行上面的语句,然后执行其余的代码。它应该可以再次工作。


有时,在调试时我们忘记了临时表元数据已被缓存。例如,您可以使用以下代码:

DROP TABLE IF EXISTS #TEST;

CREATE TABLE #TEST
(
    [A] INT
);

INSERT INTO #TEST ([A])
SELECT 1;

并且它是有效的。如果我们将其更改为:

DROP TABLE IF EXISTS #TEST;

CREATE TABLE #TEST
(
    [A] INT
   ,[B] INT
);

INSERT INTO #TEST ([A], [B])
SELECT 1, 2;

我们将得到:

Msg 207, Level 16, State 1, Line 9 Invalid column name 'B'.

因为,在当前 session 中,#TEST 表已经存在,并且引擎能够检查 B 列不存在。因此,我们需要在更改列后手动删除表,或者需要在代码语句末尾删除表。

关于sql-server - 临时表、列名称或提供的值的数量与表定义不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48948785/

相关文章:

sql - T-SQL 根据单个即将到来的日期和续订期限生成续订日期列表

sql - 获取第一行的条件 SUM

sql - 如何在同一个表中复制关系记录?

sql - 如果新行尚不存在,则将值列表中的新行插入到表中

sql-server - 查找 2 个 SQL Server 表之间的重复项并返回另一个表中的两个值并更新为重复项

java - 如何从 JSP 页面获取登录信息?我怎样才能更正我的jsp代码。?

sql-server - 将表从 SQL Server CE 3.5 数据库复制到 Visual Studio 2008 中的另一个数据库?

sql - SQL 查询中的不同值 - 高级

sql-server - SQL Serve - 如何将 n 行分组到 xml 路径的子节点

sql - 使用 string_split 将数据存储在多列而不是仅一列中?