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 
+2

究竟是“它无法运行”? – Andre

+0

Hi @ Andre451,没有明确的错误信息,当试图调试时,这行高亮显示为“qryd.Execute”。谢谢。 – Will

+0

嗨Andre451,我直接在SQL Server而不是Acess中运行查询,并且SQL Server直接显示问题的确切原因。这是数据问题,现在已经修复。非常感谢您的时间。 – Will

检查正确的连接

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(); 
+0

感谢Denish Parvadia,对于我不清楚的问题抱歉,ODBC连接稳定,我可以使用相同的ODBC连接成功运行其他代码。我编辑了这个问题来进一步说明这种情况。再次感谢。 – Will

+0

Hi @Denish Parvadia,我直接在SQL Server而不是Acess中运行查询,并且SQL Server直接显示问题的确切原因。这是数据问题,现在已经修复。非常感谢您的时间。 – Will

对不起所有,上面的问题就解决了。数据本身存在一些问题,text_field中有一些非数字数据。我很抱歉。我尝试在SQL Server而不是Access中运行SQL查询,SQL Server清楚地显示问题的原因在哪里。因此,如果您在Access中遇到TSQL问题并且原因不明,则可以尝试再次在SQL Server中执行相同的查询,并查看SQL Server是否指出错误发生了什么。我对由此造成的任何不便表示歉意。

+2

通过检查DBEngine.Errors集合,可以在Access端获得更多信息,而不仅仅是“ODBC - 调用失败”,如相关答案[此处]所述(http://stackoverflow.com/a/29777147/2144390)。我这种情况下它向我展示了“[Microsoft] [SQL Server Native Client 10.0] [SQL Server]将nvarchar值'junk'转换为数据类型int时转换失败。 –

+0

嗨@GordThompson,非常感谢! – Will