SQL 服务器:多次插入临时 table,同时为每个不同的插入创建一个值
SQL Server : multiple inserts into temp table while creating a value for each different insert
请原谅我的代码,我还在学习。
我想要做的是采用几个 select 语句并将它们插入到一个临时 table 中。对于每个 select 语句,我想要某种标识以了解数据来自哪个 select 语句。
我有一个粗略的想法,使用下面的 case 语句。
错误:
Msg 8152, Level 16, State 14, Line 14
String or binary data would be truncated.
代码:
if object_id('tempdb..#PP') is not null
drop table #PP
SELECT
#Pr.*,
Case
When TranID = TranID then 'BK Problem'
Else 'Error' End as 'Test'
INTO #PP
FROM #Pr
WHERE TypeID = 't'
--CCA Test
INSERT INTO #PP
SELECT
#Pr.*,
Case
When TranID = TranID then 'CCA Problem'
Else 'Error' End as 'Test'
FROM #Pr
WHERE TypeID = 'r'
感谢任何帮助我指明正确方向的人。
谢谢
问题是你的案例表达。当您使用 select 创建 table 时,它会将 "Test" 列创建为 varchar(10)。但在您的插入语句中,该值的长度为 11 个字符。您可以通过 cast/convert 在原始 case 表达式上使列足够宽来避免这种情况。
SELECT #Pr.*,
convert(varchar(20), Case
When TranID = TranID then 'BK Problem'
Else 'Error' End) as 'Test'
INTO #PP
FROM #Pr
WHERE TypeID = 't'
如果你这样使用SELECT.. INTO..
,列的长度由第一次插入时每列的最大长度决定。
所以..首先插入 'BK Problem',创建长度为 'BK Problem' 或 10 的 Test
列。
(这样做看看:PRINT LEN('BK Problem')
)
然后将'CCA Problem'插入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'
请原谅我的代码,我还在学习。
我想要做的是采用几个 select 语句并将它们插入到一个临时 table 中。对于每个 select 语句,我想要某种标识以了解数据来自哪个 select 语句。
我有一个粗略的想法,使用下面的 case 语句。
错误:
Msg 8152, Level 16, State 14, Line 14
String or binary data would be truncated.
代码:
if object_id('tempdb..#PP') is not null
drop table #PP
SELECT
#Pr.*,
Case
When TranID = TranID then 'BK Problem'
Else 'Error' End as 'Test'
INTO #PP
FROM #Pr
WHERE TypeID = 't'
--CCA Test
INSERT INTO #PP
SELECT
#Pr.*,
Case
When TranID = TranID then 'CCA Problem'
Else 'Error' End as 'Test'
FROM #Pr
WHERE TypeID = 'r'
感谢任何帮助我指明正确方向的人。
谢谢
问题是你的案例表达。当您使用 select 创建 table 时,它会将 "Test" 列创建为 varchar(10)。但在您的插入语句中,该值的长度为 11 个字符。您可以通过 cast/convert 在原始 case 表达式上使列足够宽来避免这种情况。
SELECT #Pr.*,
convert(varchar(20), Case
When TranID = TranID then 'BK Problem'
Else 'Error' End) as 'Test'
INTO #PP
FROM #Pr
WHERE TypeID = 't'
如果你这样使用SELECT.. INTO..
,列的长度由第一次插入时每列的最大长度决定。
所以..首先插入 'BK Problem',创建长度为 'BK Problem' 或 10 的 Test
列。
(这样做看看:PRINT LEN('BK Problem')
)
然后将'CCA Problem'插入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'