C# 关键字';文件';对于一个数据库
我得到这个错误: System.Data.SqlClient.SqlException(0x80131904):关键字“file”附近的语法不正确 查询如下所示:C# 关键字';文件';对于一个数据库,c#,sql-server,ado.net,C#,Sql Server,Ado.net,我得到这个错误: System.Data.SqlClient.SqlException(0x80131904):关键字“file”附近的语法不正确 查询如下所示: UPDATE t SET name = s.[Value] FROM [dbo].[file] t JOIN [dbo].[#TempTable] s ON t.[name] = s.[Key] 创建的临时表: CREATE TABLE [#TempTable] ([Key] varchar(500), [Value] var
UPDATE t
SET name = s.[Value]
FROM [dbo].[file] t
JOIN [dbo].[#TempTable] s ON t.[name] = s.[Key]
创建的临时表:
CREATE TABLE [#TempTable] ([Key] varchar(500), [Value] varchar(500))
在代码中也是这样:
var commandText = "UPDATE t " +
$"SET [{column.ColumnName}] = s.[{valueColumn.ColumnName}] " +
$"FROM {table.FullTableName} t " +
$"JOIN {mappingsTable.FullTableName} s ON t.[{column.ColumnName}] = s.[{keyColumn.ColumnName}] ";
并执行:
using (var command = CreateCommand(connection, transaction))
{
command.CommandText = commandText;
command.CommandTimeout = 0;
command.ExecuteNonQuery();
}
此问题仅在1个数据库中发生。不同/相同服务器上的其他三个数据库正常
可能是什么
UPD
如果我将表重命名为[dbo].[file1]-一切正常。假设
{table.FullTableName}
没有像您所说的那样包装在[]
中。如果是的话,我无法想象你会收到关于file
关键字的投诉。我看到您显式地在列周围放了括号,也许您只需要对表做同样的操作,除非您希望已经从属性包装了。FullName=[schema].[TableName],并将导致[dbo].[file]因此,wrappedJust必须满足我们的要求-您能打印出生成的commandText
的值,而不是让我们猜测您甚至没有向我们显示正在设置的多个变量的内容吗。这个查询本身就是一个问题:查询看起来像这样:UPDATE t set name=s.[value]FROM[dbo].[file]t JOIN[dbo]。t.[name]=s.[Key]上的[#tentable]s,那么,您是否声称这就是commandText
变量在抛出SqlException
时所包含的确切值,并且您已通过在调试时打印出来验证了这一点?假设{table.FullTableName}
未包装在[]
如您所述。如果是这样,我无法想象您会收到关于file
关键字的投诉。我看到您在列周围显式地放了括号,也许您只需要对表执行相同的操作,除非您希望已经从属性包装。FullName=[schema].[TableName],并将导致[dbo]。[文件]所以它是wrappedJust来满足我们的要求的-你能打印出生成的commandText
的值吗,而不是让我们猜测你甚至没有向我们显示设置的多个变量的内容。这个查询本身就是一个问题:查询看起来像这样:从[dbo].[file]t JOIN更新t set name=s.[value][dbo].[name]=s.[Key]那么,您是否声称这就是commandText
变量在抛出SqlException
时所包含的确切值,并且您已经通过在调试时打印出来验证了这一点?