ASP.生成一个create table语句

本文关键字:一个 create table 语句 ASP | 更新日期: 2023-09-27 18:16:25

我正在尝试创建一个c#语句来创建一个表。

下面是我当前的查询:

    string user = (User.Identity.Name);
    string db = user+["-Result"] + DateTime.Now.ToString("yyyyMMddHHmmss");

我正在尝试创建一个名为Jane-Result2011111111

的表

当我的语句不包含名称时,我可以创建表:

user+"Result" + DateTime.Now.ToString("yyyyMMddHHmmss");

我想知道如何在我的报表中包含- ?

谢谢

ASP.生成一个create table语句

编辑

好的,你在我第一个答案之后重新标记和编辑了你的问题。试着把括号移到引号里面(或者把它们全部去掉)。

string db = user + "[-Result]" + DateTime.Now.ToString("yyyyMMddHHmmss");

c#中有更好的方法来组合字符串。一个是String.Format
string db = String.Format("{0}-Result{1}", user, DateTime.Now.ToString("yyyyMMddHHmmss"));

原始回答

不确定代码是什么语言(c# ?),但我猜你需要一个+在你的第二个双引号和单词用户之间。

string db = "'%" + user + "%'Result" + DateTime.Now.ToString("yyyyMMddHHmmss");

user + "-Result" + DateTime.Now.ToString("yyyyMMddHHmmss");

表名中不允许使用减号(-),您可以使用下划线。阅读这里的正则标识符规则

可以使用双引号或方括号分隔表名:

string db = "[" + user + "-Result" + "]"
    + DateTime.Now.ToString("yyyyMMddHHmmss");

有关更多信息,请参阅SQL Server文档中的分隔符。

还请注意,如果用户名被篡改为包含恶意代码,则此代码可能容易受到SQL注入攻击。考虑使用SMO代替执行原始的CREATE TABLE SQL。

虽然我同意其他评论者的观点,即为每个用户创建一个表可能不是一个好的设计,但您可以更简洁地编写语句:

string db = string。Format("[{0}-Result{1}]", user, DateTime.Now.ToString("yyyyMMddHHmmss"));

有帮助吗?

数据库对象名称的最佳参考是:

http://msdn.microsoft.com/en-us/library/ms175874.aspx

这告诉您在未分隔的对象名称中允许的特殊字符不包括-,这就是它失败的原因。您可以使用下划线(这是一个有效的字符),或者通过将整个对象括在方括号中来转义它。这两个都可以。

如果你动态创建大量的表,这可能是一个设计问题。您确定将模式扩展到包含日期和用户列,然后将它们全部包含在一个表中,并使用where子句获取数据,而不是动态生成表名,这样不会更好吗?

问题在于%符号,这是LIKE操作符的通配符,不应在标识符中使用。

#替换%,你应该没问题。

见:http://msdn.microsoft.com/en-us/library/aa274626 (v = sql.80) . aspx

编辑
在您更改问题后,更新的答案是:

string db = user+"_Result" + DateTime.Now.ToString("yyyyMMddHHmmss"); 

不要使用[,用_代替-

哦,不要改变问题,这样答案就没用了。