我编写了下面的Update语句,但它显示了错误,例如"关键字'GROUP'附近的语法不正确."
UPDATE
J
SET
J.StatusID = CASE WHEN SUM(DUV.VendorDUQuantity) = SUM(RD.InvoiceQuantity) THEN 1 ELSE J.StatusID END
FROM
PLN_DU_Vendor DUV
INNER JOIN ENG_Release R ON R.ReleaseID = DUV.ReleaseID
INNER JOIN ENG_DU_Header H ON H.ReleaseID = R.ReleaseID AND DUV.DUID = H.DUID
INNER JOIN MKT_JobOrder J ON J.JobOrderID = R.JobOrderID
INNER JOIN MKT_CustomerOrder CO ON CO.OrderID = J.OrderID
LEFT JOIN PMT_RFDHeader RH ON RH.JobOrderID = J.JobOrderID
LEFT JOIN PMT_RFDDetail RD ON RD.RFDID = RH.RFDID AND RD.DUID = DUV.DUID
WHERE
CO.OrderID = 100
GROUP …Run Code Online (Sandbox Code Playgroud) 我们在这里使用Linq-to-SQL的行为非常奇怪且不一致.
我们的应用程序安装在很多客户的网站上,大部分工作都很好.Linq-to-SQL中的一个查询更新表并将DateTime列设置为新值.
在所有情况下 - 包括我们的开发和测试系统 - 这个Linq-to-SQL语句被转换成以下内容:
UPDATE dbo.OurTable
SET WorkTimeStamp = @WTS
WHERE ID = @ID
@WTS = '2011-11-04 14:15:25', @ID = 555
Run Code Online (Sandbox Code Playgroud)
但是,在一个客户的网站上,由于我们尚未明确的原因,此更新将转换为:
UPDATE dbo.OurTable
SET WorkTimeStamp = @WTS
WHERE ID = @ID
@WTS = 'Nov 4 2011 02:15:25PM', @ID = 555
Run Code Online (Sandbox Code Playgroud)
由于某种原因,然后在SQL Server 2005上失败.
现在,该客户的服务器(Web服务器和SQL Server)安装了美国英语版本的Windows Server 2008; SQL Server中的语言设置为us_english,日期格式设置为mdy,运行更新的用户帐户的语言设置为EnglishSQL Server .....并且该设置在其他地方相同(例如,在我们的测试服务器上)基础设施).
所以我的问题是:
为什么 Linq-to-SQL突然创建一个完全不同的表示形式DateTime发送到SQL Server?有没有旋钮来控制它?
为什么ADO.NET和SQL Server 2005 SP2数据库无法UPDATE正确处理该语句?我们的日志中出现错误,内容如下:
SqlTypeException …
asp.net datetime sql-server-2005 linq-to-sql update-statement
如何正确执行以下更新:
using (OracleConnection conn = new OracleConnection())
using (selCmd)
{
string sql1 = "update Table1 set name = joe where id = 10;"
string sql2 = "update Table2 set country = usa where region = americas;"
string sql3 = "update Table3 set weather = sunny where state = CA;"
string sql4 = "update Table4 set engine = v8 where maker = benz;"
cmdUpdate.CommandText = sql(#);
cmdUpdate.Connection = conn;
recs = cmdUpdate.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
我知道全部或全部,如果它是一个交易,但我只是看看它是如何工作正确的方法.
我想迭代一个项目数组[sql1,sql2,sql3,sql4]并在CommandText中传递sql(#)并每次执行ExecuteNonQuery.