Это ошибка синтаксического анализа. Вы создаете таблицу #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)
Msg 213, Level 16, State 1, Line 30 Имя столбца или количество предоставленных значений не соответствует определению таблицы.
Не запускайте ваши операторы в одном и том же наборе пакетов (то есть в разных соединениях), и ошибка не возникнет. Создание одной и той же таблицы в одном наборе пакетов с разными определениями в любом случае кажется ошибкой при выборе дизайна, поэтому простое исправление дает двум объектам разные имена:
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;
Если по какой-то странной причине , объекты « должны » иметь одинаковое имя, тогда вам нужно будет отложить синтаксический анализ последнего оператора, используя оператор «Dynami c», чтобы отложить проверку:
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;