【问题标题】:Making sure my SQL query is correct确保我的 SQL 查询正确
【发布时间】: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”附近的语法不正确。

我在 INSERTSELECT 中使用了相同数量的项目。我也看不到 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


【解决方案1】:

您的 SELECT 语句中的问题:

    CAST([s].[ UnitCost ] AS float)
    CAST([s].[Minimum Stock] AS float)

缺少这些行之间的共同点

【讨论】:

  • 感谢您的回复!完成了这项工作,但现在我收到错误消息:'s' 附近的语法不正确。我还用添加的, 更新了上面的问题
  • 我看到 [ UnitCost ]。您是否尝试删除空间?
  • 我确实修复了空格,但由于某种原因我仍然遇到同样的错误?
【解决方案2】:

您的代码是正确的,除了最后两个值之间的,

CAST([s].[ UnitCost ] AS float),
    CAST([s].[Minimum Stock] AS float)

所以在Select 中它只会考虑4 values 而在Insert 中你指定了5 columns

【讨论】:

  • 感谢您的回复!这完成了工作,但现在我收到错误:'s' 附近的语法不正确。我还更新了上面的问题,添加了,
  • @caretaker22 里面有StockItems$ $ 符号吗?
  • 你可以在sql server中运行select语句并检查错误是否到来吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多