sql-server - 插入适用于不同的查询,但不适用于 3 列
问题描述
非常感谢您的帮助!我收到此错误:
列名或提供的值的数量与表定义不匹配。
先感谢您
IF OBJECT_ID('tempdb..#VAR_TABLE5') IS NOT NULL
DROP TABLE #VAR_TABLE5
CREATE TABLE #VAR_TABLE5
(
K_NAME varchar (30),
V_NAME INT,
V_NAME2 INT
)
INSERT INTO #VAR_TABLE5
SELECT
'Average Plan Cost PMPM',
(SELECT Sum (CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MAX(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M),
(SELECT SUM(CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MIN(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M)
但是下面这个有效,我只需要第二次添加它,(VAR2 的列)
IF OBJECT_ID('tempdb..#VAR_TABLE5') IS NOT NULL
DROP TABLE #VAR_TABLE5
CREATE TABLE #VAR_TABLE5
(
K_NAME VARCHAR(30),
V_NAME INT
)
INSERT INTO #VAR_TABLE5
SELECT
'Average Plan Cost PMPM',
(SELECT SUM(CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MAX(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M)
解决方案
这是一个解析错误。您#VAR_TABLE5
在前一批中创建表,然后在后一批中创建表,DROP
然后CREATE
再次创建。解析第二INSERT
条语句时,它使用表的第一个定义(有 3 列),因此出现错误。如果您使用以下内容,则会重现该问题:
CREATE TABLE #Elig_Smry_M (CLNT_NET_DUE_AMT DECIMAL(8,2), NBNR_CLNT_NET_DUE_AMT DECIMAL(8, 2), EOM_MBR_CNT DECIMAL(8,2), ELGBLTY_CLNDR_MNTH_END_DT DATE)
IF OBJECT_ID('tempdb..#VAR_TABLE5') IS NOT NULL
DROP TABLE #VAR_TABLE5
CREATE TABLE #VAR_TABLE5
(
K_NAME varchar (30),
V_NAME INT,
V_NAME2 INT
)
INSERT INTO #VAR_TABLE5
SELECT
'Average Plan Cost PMPM',
(SELECT Sum (CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MAX(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M),
(SELECT SUM(CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MIN(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M)
GO
IF OBJECT_ID('tempdb..#VAR_TABLE5') IS NOT NULL
DROP TABLE #VAR_TABLE5
CREATE TABLE #VAR_TABLE5
(
K_NAME VARCHAR(30),
V_NAME INT
)
INSERT INTO #VAR_TABLE5
SELECT
'Average Plan Cost PMPM',
(SELECT SUM(CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MAX(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M)
消息 213,级别 16,状态 1,第 30 行
列名或提供的值的数量与表定义不匹配。
不要在同一组批次(即不同的连接)中运行您的语句,并且不会发生错误。无论如何,在同一组批次中创建同一个表,但定义不同似乎是一个设计选择错误,所以简单的修复它为 2 个对象提供不同的名称:
CREATE TABLE #Elig_Smry_M (CLNT_NET_DUE_AMT DECIMAL(8,2), NBNR_CLNT_NET_DUE_AMT DECIMAL(8, 2), EOM_MBR_CNT DECIMAL(8,2), ELGBLTY_CLNDR_MNTH_END_DT DATE)
IF OBJECT_ID('tempdb..#VAR_TABLE5') IS NOT NULL
DROP TABLE #VAR_TABLE5
CREATE TABLE #VAR_TABLE5
(
K_NAME varchar (30),
V_NAME INT,
V_NAME2 INT
)
INSERT INTO #VAR_TABLE5
SELECT
'Average Plan Cost PMPM',
(SELECT Sum (CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MAX(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M),
(SELECT SUM(CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MIN(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M)
GO
IF OBJECT_ID('tempdb..#VAR_TABLE5') IS NOT NULL
DROP TABLE #VAR_TABLE6
CREATE TABLE #VAR_TABLE6
(
K_NAME VARCHAR(30),
V_NAME INT
)
INSERT INTO #VAR_TABLE6
SELECT
'Average Plan Cost PMPM',
(SELECT SUM(CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MAX(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M)
GO
DROP TABLE #Elig_Smry_M;
如果出于某种奇怪的原因,对象“必须”具有相同的名称,那么您将需要通过使用“动态”语句来延迟后一个语句的解析以延迟验证:
CREATE TABLE #Elig_Smry_M (CLNT_NET_DUE_AMT DECIMAL(8,2), NBNR_CLNT_NET_DUE_AMT DECIMAL(8, 2), EOM_MBR_CNT DECIMAL(8,2), ELGBLTY_CLNDR_MNTH_END_DT DATE)
IF OBJECT_ID('tempdb..#VAR_TABLE5') IS NOT NULL
DROP TABLE #VAR_TABLE5
CREATE TABLE #VAR_TABLE5
(
K_NAME varchar (30),
V_NAME INT,
V_NAME2 INT
)
INSERT INTO #VAR_TABLE5
SELECT
'Average Plan Cost PMPM',
(SELECT Sum (CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MAX(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M),
(SELECT SUM(CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MIN(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M)
GO
IF OBJECT_ID('tempdb..#VAR_TABLE5') IS NOT NULL
DROP TABLE #VAR_TABLE5
CREATE TABLE #VAR_TABLE5
(
K_NAME VARCHAR(30),
V_NAME INT
)
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'INSERT INTO #VAR_TABLE5
SELECT
''Average Plan Cost PMPM'',
(SELECT SUM(CLNT_NET_DUE_AMT + NBNR_CLNT_NET_DUE_AMT ) / SUM(EOM_MBR_CNT) / DATEDIFF(M, MIN(ELGBLTY_CLNDR_MNTH_END_DT), MAX(ELGBLTY_CLNDR_MNTH_END_DT))
FROM #Elig_Smry_M)';
EXEC sys.sp_executesql @SQL;
GO
DROP TABLE #Elig_Smry_M;
推荐阅读
- sitefinity - 以编程方式创建 sitefinity(自定义模块)内容副本的正确方法是什么?
- wpf - 在 CodeBehind 中更新 FlowDocument 的文本
- asp.net-core - 是否有可能找到有关调用您的 api 的计算机/用户的任何信息?如果是这样,怎么做?
- neo4j - 第一课第一次查询时出错:“您的查询中应该有一个标题属性”
- android - 数组覆盖而不是添加
- python - Numpy数组错误使用序列设置数组元素
- c++ - 在使用 Cereal 序列化库时设置我可以在序列化函数中访问的属性
- go - 第一天使用调试数据结构
- c# - KendoUI mvc 网格在新记录中出现下拉错误
- java - 用于查看编年史队列/地图内容的 UI/实用程序