SQL Server不同列名表间数据复制及默认值赋值方法问询
解决方案
直接使用INSERT @TempTable0 EXEC...会因为列名不匹配、目标表多两个非空列而执行失败,需要先捕获存储过程的输出,再完成列映射与默认值填充,具体步骤如下:
- 声明中间表存储存储过程结果
创建一个与存储过程返回结构(即Table 1的结构)一致的中间表变量,用来接收存储过程输出的数据:
DECLARE @TempTable1 TABLE ( ID INT, -- 请根据实际数据类型调整 Wager DECIMAL(18,2), -- 请根据实际数据类型调整 TransactionType INT -- 请根据实际数据类型调整 )
- 将存储过程结果插入中间表
INSERT INTO @TempTable1 EXEC [server].[DB].[dbo].[stored_proc] @ClientID = @ClientID, @StartDate = @StartDate, @EndDate = @EndDate;
- 映射列并插入目标临时表
从中间表读取数据,将Wager映射到Stake、TransactionType映射到TransactionTypeID,同时为Markets和Odds指定符合类型要求的默认值:
-- 若@TempTable0未声明,先定义其结构 DECLARE @TempTable0 TABLE ( ID INT, Stake DECIMAL(18,2), TransactionTypeID INT, Markets VARCHAR(100) NOT NULL, -- 请根据实际数据类型调整 Odds DECIMAL(10,2) NOT NULL -- 请根据实际数据类型调整 ) INSERT INTO @TempTable0 (ID, Stake, TransactionTypeID, Markets, Odds) SELECT ID, Wager AS Stake, TransactionType AS TransactionTypeID, '默认市场' AS Markets, -- 替换为你的实际默认值 1.99 AS Odds -- 替换为你的实际默认值 FROM @TempTable1;
注意事项
- 确保中间表的列数据类型与存储过程返回的列类型完全匹配,避免类型转换错误
Markets和Odds的默认值需对应列的数据类型,比如数值类型不能用字符串值,反之亦然- 如果存储过程返回的列名与中间表列名一致,无需额外处理列映射,直接插入即可
内容的提问来源于stack exchange,提问作者Meeth46
相关产品推荐
相关产品推荐

