T-SQL如何从另一个nvarchar字段更新一个int字段的值
我试图用以下代码从另一个nvarchar字段更新我的Access DB中的ODBC链接SQL Server表的一个int字段。但它没有运行,我不知道我错过了什么,感谢有人能帮助。非常感谢。T-SQL如何从另一个nvarchar字段更新一个int字段的值
Function update_test()
Dim qryd As QueryDef
Set qryd = CurrentDb.CreateQueryDef("")
qryd.Connect = "ODBC;DSN=ODBC11;"
qryd.SQL = "UPDATE table1 SET int_field = CAST(text_field AS int)"
qryd.ReturnsRecords = False
qryd.Execute
End Function
我的ODBC连接是否正确和稳定,下面的代码可以成功运行,这就是为什么我很困惑,为什么上面的代码无法运行。
这些代码可以成功地运行:
Function update_test()
Dim qryd As QueryDef
Set qryd = CurrentDb.CreateQueryDef("")
qryd.Connect = "ODBC;DSN=ODBC11;"
qryd.SQL = "UPDATE table1 SET int_field = other_int_field"
qryd.ReturnsRecords = False
qryd.Execute
End Function
检查正确的连接
ODBC DSN
using System.Data.Odbc;
var conn = new OdbcConnection();
conn.ConnectionString =
"Dsn=DsnName;" +
"Uid=UserName;" +
"Pwd=Secret;";
conn.Open();
ODBC - 标准连接
using System.Data.Odbc;
var conn = new OdbcConnection();
conn.ConnectionString =
"Driver={SQL Server};" +
"Server=DataBaseNamex;" +
"DataBase=DataBaseName;" +
"Uid=UserName;" +
"Pwd=Secret;";
conn.Open();
ODBC - 可信连接
using System.Data.Odbc;
var conn = new OdbcConnection();
conn.ConnectionString =
"Driver={SQL Server};" +
"Server=ServerName;" +
"DataBase=DataBaseName;" +
"Uid=;" +
"Pwd=;";
conn.Open();
// or
var conn = new OdbcConnection();
conn.ConnectionString =
"Driver={SQL Server};" +
"Server=ServerName;" +
"DataBase=DataBaseName;" +
"Trusted_Connection=Yes;";
conn.Open();
对不起所有,上面的问题就解决了。数据本身存在一些问题,text_field中有一些非数字数据。我很抱歉。我尝试在SQL Server而不是Access中运行SQL查询,SQL Server清楚地显示问题的原因在哪里。因此,如果您在Access中遇到TSQL问题并且原因不明,则可以尝试再次在SQL Server中执行相同的查询,并查看SQL Server是否指出错误发生了什么。我对由此造成的任何不便表示歉意。
通过检查DBEngine.Errors集合,可以在Access端获得更多信息,而不仅仅是“ODBC - 调用失败”,如相关答案[此处]所述(http://stackoverflow.com/a/29777147/2144390)。我这种情况下它向我展示了“[Microsoft] [SQL Server Native Client 10.0] [SQL Server]将nvarchar值'junk'转换为数据类型int时转换失败。 –
嗨@GordThompson,非常感谢! – Will
究竟是“它无法运行”? – Andre
Hi @ Andre451,没有明确的错误信息,当试图调试时,这行高亮显示为“qryd.Execute”。谢谢。 – Will
嗨Andre451,我直接在SQL Server而不是Acess中运行查询,并且SQL Server直接显示问题的确切原因。这是数据问题,现在已经修复。非常感谢您的时间。 – Will