确保我的SQL查询正确

时间:2015-06-17 09:48:11

标签: c# sql-server linq linq-to-entities

我正在尝试运行下面的查询,但不知怎的,我做错了什么。我不是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值的数量必须与数量匹配   INSERT列。

     

关键字“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$

的原因的图片

enter image description here

我找到了我的问题!很抱歉浪费你所有的时间。我忘了将额外的列添加到dbo.StockItems$数据库中的ExcelItemStock表中。完全是我的错!

2 个答案:

答案 0 :(得分:2)

SELECT语句中的问题:

function [is_happy,h_array,unh_array]=happy_number(in_val)
%
% Output:
%    is_happy: 1 ==> the numberis happy
%              0 ==> the numberis unhappy
%    h_array: happy numbers within input
%    unh_array: unhappy numbers within input
%

% Input validity check (to be improved)
s=size(in_val);
if(iscell(in_val) || isstr(in_val) || isstruct(in_val) ...
      || ~find(s,1) || length(s) >= 3 || sum(floor(in_val)-in_val) ~= 0)
   error('Only scalar or 1 dim array supported')
end
% Vars initialization
h_array=[];
unh_array=[];
h_array_cnt=1;
unh_array_cnt=1;
h_unh_cnt=1;
% Loop through input number
for i=1:length(in_val)
   seq=[];
   n=in_val(i);
   seq_cnt=1;
   seq(seq_cnt)=n;
% Test if the number is happy
   while(n ~= 1 && n ~= 4)
% Decompose the number in its digits      
      sn=num2str(n);
      nv=str2num(sn(:));
      seq_cnt=seq_cnt+1;
      seq(seq_cnt)=sum(nv.^2);
      n=seq(seq_cnt);
   end
% Set and display results   
   if(n == 1)
      disp(['Number ' num2str(seq(1)) ' is HAPPY'])
      is_happy(h_unh_cnt)=1;
      h_unh_cnt=h_unh_cnt+1;
      h_array(h_array_cnt)=seq(1);
      h_array_cnt=h_array_cnt+1;
   else
      disp(['Number ' num2str(seq(1)) ' is UNHAPPY'])
      is_happy(h_unh_cnt)=0;
      h_unh_cnt=h_unh_cnt+1;
      unh_array(unh_array_cnt)=seq(1);
      unh_array_cnt=unh_array_cnt+1;
   end

end

缺少这些行之间的共同点

答案 1 :(得分:1)

除了最后两个值之间的,

之外,您的代码是正确的
CAST([s].[ UnitCost ] AS float),
    CAST([s].[Minimum Stock] AS float)

所以在Select {} {}} {} {}} {/}}