【问题标题】:Why SQL table name cannot start with numeric?为什么 SQL 表名不能以数字开头?
【发布时间】:2017-10-28 07:21:35
【问题描述】:

我是C#SQL 的新手。

使用以下代码,我正在尝试创建新表,一切顺利,但问题是:使用textBox 如果我命名表以数字开头(123MytableName),则会引发错误,提示“语法不正确靠近 '123MytableName'"

              using (SqlConnection MyConnection = new SqlConnection())
              using (SqlCommand MySQLCommand = new SqlCommand())              
            {


                MyConnection.ConnectionString = " Data Source=localhost; Initial Catalog=TestDB ;Integrated Security=true;Max Pool Size=1024; Pooling=true";

                MyConnection.Open();

                MySQLCommand.CommandText = "CREATE TABLE "+textBox1.Text+" (Col1 int, Col2 varchar(50), Col money)";
                MySQLCommand.Connection = MyConnection;
                MySQLCommand.ExecuteNonQuery();
           }

我阅读了this,但没有帮助。

任何人都知道如何解决它,以便我可以创建以数字开头的表格?

谢谢

【问题讨论】:

  • 直接在 SQL 代码中使用来自用户的输入而不进行任何类型的清理是确保安全漏洞大到足以让宽负载 18 轮车通过它们的可靠方法。 Think about Bobby Tables 每当您想做类似的事情时。
  • 不能使用参数作为表名,所以最好研究一些其他方法来防止 SQL 注入。在彻底清理和验证用户输入之后,添加“TBL”之类的前缀就足够了。
  • 您的下一个问题:“我不能命名我的表 SELECT”、“我不能有两个不同的表名为 ABC”、...
  • 这样做(或其他坏事)“只是为了测试”的问题在于,它很容易变成习惯,习惯。最好从一开始就养成好习惯。
  • @user8074669,关于您问题的部分原因,SQL Server 遵循 ANSI 标准命名惯例。名称必须以字母开头,并且只能包含字母、下划线字符 (_) 和数字。

标签: c# sql sql-server ddl


【解决方案1】:

您可以通过用[] 括起来来转义表的名称:

MySQLCommand.CommandText = "CREATE TABLE ["+textBox1.Text+"] (Col1 int, Col2 varchar(50), Col money)";
// Here ---------------------------------^-----------------^

【讨论】:

  • 它成功了,谢谢,但它可以与“SELECT”语句一起使用吗?我的意思是如果我想从 123MytableName 表中读取数据?
  • @user8074669 是的,但你也必须在那里逃脱 - "SELECT * FROM [123MytableName] --etc.."
  • @user8074669 相同的方法 ... 从 [123MytableName 表] 中选择 *
  • 好的,我使用 ["+textBox1.Text+"] 修复了这个问题。
  • @user8074669,我希望你的表名永远不要包含[] :-)
猜你喜欢
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 2022-01-27
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多