create table命令出错 - 附近的语法不正确

时间:2016-10-12 23:19:16

标签: c# asp.net sql-server ado.net

我想根据会话的变量名称

创建一个表名

(会话变量是学生的电子邮件ID,该学生的sid将是我要创建的表名)

注意:sid很好......

这是代码

SqlConnection con99 = new SqlConnection(con100);
con99.Open();
String email = Session["sname"].ToString();
SqlCommand cmd = new SqlCommand("select id from students where email='" 
+ email + "'", con99);
sid = cmd.ExecuteScalar().ToString(); //as sid is int
using (SqlCommand command = new SqlCommand("CREATE TABLE " + sid + 
"(sno int, qpname nvarchar(500), mobtained int, tmarks int);", con99))
command.ExecuteNonQuery();        
con99.Close();

here is the error message pic

variable sid is also being created-pic

2 个答案:

答案 0 :(得分:2)

如果使用数字命名,则必须在表名周围加上括号。因此,在评估时,您的脚本必须像这样结束:

CREATE TABLE [2] (sno int, qpname nvarchar(500), mobtained int, tmarks int);
坦率地说,我很惊讶这是允许的。它可能是较新版本的SQL Server的一个功能。

创建数据库对象的更好方法是使用SQL Server管理对象(SMO)库。制作语法错误的机会要少得多:

示例from here

Server srv = new Server("(local)");
Database db = srv.Databases["AdventureWorks2012"];

Table tb = new Table(db, "Test Table");
Column col1 = new Column(tb, "Name", DataType.NChar(50));
Column col2 = new Column(tb, "ID", DataType.Int);

tb.Columns.Add(col1); 
tb.Columns.Add(col2); 
tb.Create();

答案 1 :(得分:0)

第一个是错误,接下来的2个不是:

create table 2 (id int)

create table [2] (id int)

create table ID_2 (id int)

请参阅“第一个字符必须是以下某个字符”here之类的部分。