SQL Server:在为每个不同的插入创建值时多次插入临时表

时间:2017-05-16 19:14:59

标签: sql sql-server temp-tables insert-into

原谅我的代码,我还在学习。

我想要做的是获取几个select语句并将它们插入到一个临时表中。对于每个select语句,我想要某种标识来知道数据来自哪个select语句。

我在下面有一个粗略的想法,使用下面的案例陈述。

错误:

  

Msg 8152,Level 16,State 14,Line 14
  字符串或二进制数据将被截断。

代码:

<username>

我感谢任何指导我正确方向的帮助。

由于

2 个答案:

答案 0 :(得分:2)

问题在于您的案例表达。使用select into创建表时,会将“Test”列创建为varchar(10)。但是在insert语句中,该值的长度为11个字符。您可以通过对原始案例表达式进行强制转换/转换来避免这种情况,以使列足够宽。

SELECT #Pr.*, 
       convert(varchar(20), Case
       When TranID = TranID then 'BK Problem'
       Else 'Error' End) as 'Test'
INTO #PP
FROM #Pr
WHERE TypeID = 't'

答案 1 :(得分:2)

如果您像这样使用SELECT.. INTO..,则列长度由第一个插入的每列的最大长度决定。

所以..插入&#39; BK问题&#39;首先,创建Test列,其长度为“BK问题”或“10” (请执行此操作以查看:PRINT LEN('BK Problem')

然后插入CCA问题&#39;进入Test失败,因为长度为11并且太长了。

我也不了解你的案例陈述的必要性,试试这个:

SELECT #Pr.*, CAST('BK Problem' as VARCHAR(11)) Test
INTO #PP
FROM #Pr
WHERE TypeID = 't'

--CCA Test
INSERT INTO #PP
SELECT #Pr.*, 'CCA Problem'
FROM #Pr
WHERE TypeID = 'r'