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");
我想知道如何在我的报表中包含-
?
谢谢
编辑
好的,你在我第一个答案之后重新标记和编辑了你的问题。试着把括号移到引号里面(或者把它们全部去掉)。
string db = user + "[-Result]" + DateTime.Now.ToString("yyyyMMddHHmmss");
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");
不要使用[
,用_
代替-
。
哦,不要改变问题,这样答案就没用了。