【发布时间】:2015-06-25 01:39:02
【问题描述】:
我正在尝试运行下面的查询,但不知何故我做错了。我不是 SQL Server 专家,但据我所知,我使用的代码没有问题,但如果有人能看到我的问题,请指出给我。
INSERT INTO
[dbo].[StockItems] ([StockCode],[Description],[Mass],[UnitCost],[MinimumStock])
SELECT DISTINCT
[s].[New_StockCode],
RTRIM(LTRIM(ISNULL([s].[New_Description], ''))),
[s].[Mass],
CAST([s].[ UnitCost ] AS float),
CAST([s].[Minimum Stock] AS float)
FROM
[ExcelItemStock].[dbo].[StockItems$] AS [s]
WHERE
[s].[New_StockCode] NOT IN (
SELECT
[StockCode]
FROM
[dbo].[StockItems]
) AND
[s].[New_StockCode] IS NOT NULL AND
[s].[ UnitCost ] IS NOT NULL AND
[s].[Minimum Stock] IS NOT NULL
错误:
INSERT 语句的选择列表包含的项目少于 插入列表。 SELECT 值的数量必须与 插入列。
关键字“AND”附近的语法不正确。
我在 INSERT 和 SELECT 中使用了相同数量的项目。我也看不到 AND 错误的问题出在哪里?
我正在使用 linq-to-entities,下面是我的课程,如果它可能有任何帮助的话:
public class StockItem
{
public StockItem()
{
SectionGroups = new HashSet<SectionGroup>();
}
public int Id { get; set; }
private string _stockCode;
[Index(IsUnique = true)]
[StringLength(450)]
[Required]
public string StockCode
{
get { return _stockCode; }
set { _stockCode = value.ToUpper(); }
}
public string Description { get; set; }
public virtual ICollection<SectionGroup> SectionGroups { get; set; }
public double? Mass { get; set; }
public double UnitCost { get; set; }
public double? MinimumStock { get; set; }
public override string ToString()
{
return StockCode + " - " + Description;
}
}
编辑:添加了建议的, 并得到错误:
“s”附近的语法不正确。
@Sachu -- 这张图片也许可以更好地解释我为什么使用StockItems$
我找到了我的问题!很抱歉浪费了你所有的时间。我忘记在我的ExcelItemStock 数据库中的dbo.StockItems$ 表中添加额外的列。完全是我的错!
【问题讨论】:
-
您在 2
CAST之间缺少一个逗号 -
你真的有一列
[ UnitCost ]有开头和结尾的空格 -
@ughai - 是的,它是从 Excel 电子表格自动生成的。
-
您使用的是哪个 excel 提供程序?
标签: c# sql-server linq linq-to-entities