此SQL server查询是否存在语法错误?我能不能不使用;目标。@1";?
硬编码,这是有效的:此SQL server查询是否存在语法错误?我能不能不使用;目标。@1";?,sql,sql-server,database,Sql,Sql Server,Database,硬编码,这是有效的: var insertCommand1 = ("MERGE INTO Leaderboard WITH (HOLDLOCK) AS target USING (SELECT * FROM Scores WHERE WeekNumber = 7) AS Source ON (target.id = source.id) WHEN MATCHED THEN UPDATE SET target.Id = source.Id, target.Week7 = source.weekl
var insertCommand1 = ("MERGE INTO Leaderboard WITH (HOLDLOCK) AS target USING (SELECT * FROM Scores WHERE WeekNumber = 7) AS Source ON (target.id = source.id) WHEN MATCHED THEN UPDATE SET target.Id = source.Id, target.Week7 = source.weeklyScore WHEN NOT MATCHED THEN INSERT (Id, Week7) VALUES (source.Id, source.weeklyScore);");
db.Execute(insertCommand1);
这不起作用:
var insertCommand1 = ("MERGE INTO Leaderboard WITH (HOLDLOCK) AS target USING (SELECT * FROM Scores WHERE WeekNumber = @0) AS Source ON (target.id = source.id) WHEN MATCHED THEN UPDATE SET target.Id = source.Id, target.@1 = source.weeklyScore WHEN NOT MATCHED THEN INSERT (Id, @2) VALUES (source.Id, source.weeklyScore);");
db.Execute(insertCommand1, weeknum, weekstring, weekstring);
错误表明@1附近有语法错误。这会是什么?
我已经调试过了,以确保weeknum和weekstring的值是正确的
在VS 2015上使用SQL server
两个表的架构-
Leaderboard(Id, Week1, Week2, Week3, Week4, Week5,
Week6, Week7, Week8, Week9, Week10)
with Id as the primary key
Scores(Id, WeekNumber, weeklyScore)
with Id and WeekNumber as the primary key
您正在尝试使用参数设置字段名,@parameters用于值
, target.@1 = source.weeklyScore
应该是
, target.something = @1
您正在尝试使用参数设置字段名,@parameters用于值
, target.@1 = source.weeklyScore
应该是
, target.something = @1
看起来您正在尝试将参数用作模式对象名,而不是值。正如你所发现的,这是行不通的。参数仅用于值
, target.@1 = source.weeklyScore
如果需要动态模式对象名称,请注意两件事:
var query = string.Format("SELECT SomeTable.{0} FROM SomeTable ...", knownList[x]);
(或者,不管你想如何组织,希望你能得到这个想法。)
然后,通过动态生成的查询,您可以添加参数值,一切都已就绪。看起来您正在尝试将参数用作模式对象名,而不是值。正如你所发现的,这是行不通的。参数仅用于值
, target.@1 = source.weeklyScore
如果需要动态模式对象名称,请注意两件事:
var query = string.Format("SELECT SomeTable.{0} FROM SomeTable ...", knownList[x]);
(或者,不管你想如何组织,希望你能得到这个想法。)
然后,通过动态生成的查询,您可以添加参数值,一切都已就绪。您可能问了错误的问题。请向我们展示一些数据和预期的输出,以及您试图实现的目标,我们可以为您提供更多帮助。@JuanCarlosOropeza刚刚发布了架构-希望这有帮助!Jules您的模型外观应该是标准化的,
排行榜应该是{Id,Week\u Id,Score}
然后如果您想显示几周,您可以使用PIVOT
,这将允许您在不更改db设计的情况下添加或删除周数。实际上,在查看分数之后,您不需要排行榜
表格。只需使用超过的分数创建一个视图即可。您可能问了错误的问题。请向我们展示一些数据和预期的输出,以及您试图实现的目标,我们可以为您提供更多帮助。@JuanCarlosOropeza刚刚发布了架构-希望这有帮助!Jules您的模型外观应该是标准化的,排行榜应该是{Id,Week\u Id,Score}
然后如果您想显示几周,您可以使用PIVOT
,这将允许您在不更改db设计的情况下添加或删除周数。实际上,在查看分数之后,您不需要排行榜
表格。只需使用over分数创建一个视图即可。哦,好的。有什么替代方案?这是一个变化的动态变量,我需要能够改变查询所说的内容。您可以创建一个动态查询。但我还是不确定你在这里想要实现什么。乍一看,您的查询似乎不符合逻辑,因此我们需要db架构示例数据并希望输出能够理解您需要的内容。您必须将字符串构建中的@1替换为您正在检查的字段名称,例如,var insertCommand1=(“合并到排行榜,使用(HOLDLOCK)作为目标使用(在匹配时,从WeekNumber=@0的分数中选择*作为源(target.id=Source.id),然后更新SET target.id=Source.id,target.“&fieldNameVar&“=Source.weeklyScore,如果不匹配,则插入(id,@2)值(Source.id,Source.weeklyScore);”);
但是,您的查询肯定有一些缺陷。为什么要更新ID?为什么来自weeklyscore
的值会出现在不同的字段中?它会出现多少不同的字段名?它们都在一个表中吗?数据看起来像什么?所有这些可能都需要为您提供最佳答案,如而不是简单地回答你所问的问题,而不试图看这是否是达到你想要的结果的最佳方式。@JuanCarlosOropeza我将target.Week7作为目标。@1因为Week7是