0

您好,我目前正在使用 Visual Studio 2008 中的报告。我使用下面的查询来创建数据集。当我测试查询时,这在 SQL / SMSS 和数据集中正常工作。

SELECT 
CASE WHEN Make LIKE 'FO%' THEN 'Ford' 
     WHEN Make LIKE 'HON%' THEN 'Honda' 
END Make, 

CASE WHEN model LIKE 'CIV%' THEN 'Civic' 
     WHEN model LIKE '%AC%' THEN 'Accord'
     ELSE model 
END model, 
    year, AVG(Fuel.MPG) as AVGMPG
From cars, Fuel
Where Fuel.ID=cars.ID
    AND year > 2003
        AND Make is not NULL
            AND model is not NULL
                AND year is not NULL
    Group by Make, model, year

当我有报告引用数据集时,它会生成以下错误;

报告处理过程中发生错误。调用的目标已引发异常。无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。

由于实际的 SQL 语句较大并且涉及多个 CASE 语句,所有这些语句都有效,因此我将其缩小到语句的 else 部分。

对于背景,我试图从模型中提取所有数据,但对某些相似的值进行分组,但仍会提取其余数据。

4

2 回答 2

0
SELECT 
CASE WHEN Make LIKE 'FO%' THEN 'Ford' 
     WHEN Make LIKE 'HON%' THEN 'Honda' 
END Make

如果没有默认情况,您最终会遇到错误。将其更改为

SELECT 
CASE WHEN Make LIKE 'FO%' THEN 'Ford' 
     WHEN Make LIKE 'HON%' THEN 'Honda'
     ELSE ''
END Make

这是查找错误列和实际错误的快速方法:

var ds = new DataSet(); 
ds.EnforceConstraints = false;  
/* Fill dataset */  
try {  
   ds.EnforceConstraints = true;  
} catch {  
   foreach (DataTable tbl in ds.Tables) {  
      if (tbl.HasErrors) {  
         foreach (DataRow row in tbl.GetErrors()) {  
            foreach (DataColumn col in row.GetColumnsInError() {  
               row.GetColumnError(col); 
            }  
         }  
      }  
   }  
}
于 2013-08-05T15:11:27.460 回答
0

我在这里最好的猜测是,对于某些行,model列包含null,而报告中的数据集不允许null列值。

于 2013-08-05T13:54:02.497 回答