Sql server 添加UNION ALL SELECT后,字符串或二进制数据将被截断

Sql server 添加UNION ALL SELECT后,字符串或二进制数据将被截断,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我对SQL世界相当陌生,但已经在开发中很多年了。我得到了一个非常令人困惑的错误。我在SELECT语句中添加了最后一个UNION ALL SELECT(带有ncr\u actual\u dev的那个),只有在声明表时才会导致错误。如果我单独运行整个SELECT语句(粗体中的部分),它将完成,不会出现问题。或者,如果我像第二个示例那样运行它,则没有错误。我错过了什么 DECLARE @table TABLE (prod_code varchar(10),

我对SQL世界相当陌生,但已经在开发中很多年了。我得到了一个非常令人困惑的错误。我在SELECT语句中添加了最后一个UNION ALL SELECT(带有ncr\u actual\u dev的那个),只有在声明表时才会导致错误。如果我单独运行整个SELECT语句(粗体中的部分),它将完成,不会出现问题。或者,如果我像第二个示例那样运行它,则没有错误。我错过了什么

DECLARE @table TABLE (prod_code varchar(10), 
                      Stage varchar(10), 
                      Stage_Date date)
INSERT INTO @table
  SELECT product_code, 'PLAN' AS Stage, ncr_actual_plan AS Stage_Date 
    FROM ip.product_custom_data 
    WHERE ncr_actual_plan IS NOT NULL
  UNION ALL SELECT product_code, 'CD' AS Stage, ncr_actual_cd 
    FROM ip.product_custom_data 
    WHERE ncr_actual_cd IS NOT NULL
  UNION ALL SELECT product_code, 'CCA' AS Stage, ncr_actual_cca 
    FROM ip.product_custom_data 
    WHERE ncr_actual_cca IS NOT NULL
  UNION ALL SELECT product_code, 'CONCEPT' AS Stage, ncr_actual_concept 
    FROM ip.product_custom_data 
    WHERE ncr_actual_concept IS NOT NULL
  UNION ALL SELECT product_code, 'DEVELOPMENT' AS Stage, ncr_actual_dev 
    FROM ip.product_custom_data 
    WHERE ncr_actual_dev IS NOT NULL

使用:

'DEVELOPMENT'作为Stage
有11个字符,您已尝试插入到列
Stage varchar(10)

或者,您可以使用temp table并选择进入,如:

SELECT product_code, 'PLAN' AS Stage, ncr_actual_plan AS Stage_Date
INTO #table 
FROM ip.product_custom_data 
WHERE ncr_actual_plan IS NOT NULL
UNION ALL SELECT product_code, 'CD' AS Stage, ncr_actual_cd 
FROM ip.product_custom_data 
WHERE ncr_actual_cd IS NOT NULL
UNION ALL SELECT product_code, 'CCA' AS Stage, ncr_actual_cca 
FROM ip.product_custom_data 
WHERE ncr_actual_cca IS NOT NULL
UNION ALL SELECT product_code, 'CONCEPT' AS Stage, ncr_actual_concept 
FROM ip.product_custom_data 
WHERE ncr_actual_concept IS NOT NULL
UNION ALL SELECT product_code, 'DEVELOPMENT' AS Stage, ncr_actual_dev 
FROM ip.product_custom_data 
WHERE ncr_actual_dev IS NOT NULL;

SELECT *
FROM #table;

哦!我盯着它看了这么久,完全没注意到。谢谢
DECLARE @table TABLE (prod_code varchar(100), Stage varchar(100), Stage_Date date) ...
SELECT product_code, 'PLAN' AS Stage, ncr_actual_plan AS Stage_Date
INTO #table 
FROM ip.product_custom_data 
WHERE ncr_actual_plan IS NOT NULL
UNION ALL SELECT product_code, 'CD' AS Stage, ncr_actual_cd 
FROM ip.product_custom_data 
WHERE ncr_actual_cd IS NOT NULL
UNION ALL SELECT product_code, 'CCA' AS Stage, ncr_actual_cca 
FROM ip.product_custom_data 
WHERE ncr_actual_cca IS NOT NULL
UNION ALL SELECT product_code, 'CONCEPT' AS Stage, ncr_actual_concept 
FROM ip.product_custom_data 
WHERE ncr_actual_concept IS NOT NULL
UNION ALL SELECT product_code, 'DEVELOPMENT' AS Stage, ncr_actual_dev 
FROM ip.product_custom_data 
WHERE ncr_actual_dev IS NOT NULL;

SELECT *
FROM #table;