我试图在输出子句的帮助下插入Id,但我得到这个错误:
列名或提供的值数量与表定义不匹配
CREATE TABLE #TEMP_Master_DimensionValues
(
Id int,
[Name] varchar(max),
[FullName] varchar(max),
ID_DimensionHierarchyType varchar(max),
StartDate varchar(max),
EndDate varchar(max)
)
DECLARE @OutputTbl TABLE ([ID] INT);
INSERT INTO #TEMP_Master_DimensionValues
OUTPUT INSERTED.[ID] INTO @OutputTbl([ID])
SELECT
'April01-17' [Name],
'''Week of ''' + CONVERT(VARCHAR, (SELECT Min('2021-04-01') FROM Master_DimensionValues), 107) [FullName],
'3' [ID_DimensionHierarchyType],
'2021-04-01' [StartDate],
NULL [EndDate];
上面的选择语句是正确的,并返回一个结果,但是当我尝试进入#TEMP_Master_DimensionValues
时,我无法弄清楚出了什么问题。如果有人能帮助我,我将不胜感激。
Ialways建议为explicit关于你要插入的列-所以把你的INSERT
语句改成这样:
DECLARE @OutputTbl TABLE ([ID] INT);
INSERT INTO #TEMP_Master_DimensionValues ([Name], [FullName], ID_DimensionHierarchyType, StartDate, EndDate)
OUTPUT INSERTED.[ID] INTO @OutputTbl([ID])
SELECT
'April01-17' [Name],
'''Week of ''' + CONVERT(VARCHAR, (SELECT Min('2021-04-01') FROM Master_DimensionValues), 107) [FullName],
'3' [ID_DimensionHierarchyType],
'2021-04-01' [StartDate],
NULL [EndDate];
同时,我强烈推荐不只是让一切都成为varchar(max)
-使用最合适的数据类型-总是-所以StartDate
或EndDate
应该是DATE
(或DATETIME2(n)
) -但肯定不是varchar(max)
!