我想从其他表创建新表并发送电子邮件。但是,它在sda.Fill(dt);
System.Data.SqlClient.SqlException:'附近的语法不正确('。 关键字'打开'附近的语法不正确。
private DataTable GetData()
{
string connString = @"Data Source=aa.database.windows.net;Initial Catalog=aa;Persist Security Info=True;User ID=aa;Password=aa";
string query = "CREATE TABLE new_table AS(SELECT ID, Employee, Name, Open Date, Task FROM tblEmployees, tblEmployees, Stores, Stores, tblTasks)";
using (SqlConnection con = new SqlConnection(connString))
{
using (SqlCommand comm = new SqlCommand(query))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
comm.Connection = con;
sda.SelectCommand = comm;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
return dt;
}
}
}
}
}
答案 0 :(得分:0)
您正在引用其中包含空格的列名称。将Open Date
更改为[Open Date]
,您的查询应该有效。
你也缺少一个右括号。
答案 1 :(得分:0)
CREATE TABLE new_table AS (SELECT ...
如果您的新对象完全由另一个表中的SELECT定义,则需要CREATE VIEW
,而不是CREATE TABLE
。而且应该没有括号。正如@ babak-nafias所说,列名中一定没有空格 - 或者它们应该用引号或[]括号引用。
CREATE VIEW new_view AS SELECT ID, Employee, Name, Open Date, Task FROM tblEmployees, tblEmployees, Stores, Stores, tblTasks;
最后 - 如果您选择所有这些表 - tblEmployee选择了两次! - 没有JOIN
关系甚至WHERE
条款,您将获得:
答案 2 :(得分:0)
错误消息指的是您在查询中使用的正确sql语法。除非有特殊原因,否则您可以删除查询的第一部分并进行以下操作:
string query = "SELECT ID, Employee, Name, [Open Date], Task FROM tblEmployees, tblEmployees, Stores, Stores, tblTasks";
(感谢Babak Naffas在列名中捕获该空间)
这应解决SqlException
。
另外,DataTable
没有实现IDisposable
,那你为什么要使用Using
语句?您也可以删除Using
语句
using (SqlDataAdapter sda = new SqlDataAdapter())
{
comm.Connection = con;
sda.SelectCommand = comm;
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}