【问题标题】:How to create a table with name as parameter?如何创建以名称为参数的表?
【发布时间】:2015-04-20 08:27:11
【问题描述】:

我在 msdn 的文档中没有找到如何插入执行语句表名的参数。我尝试过同样的推理:

var myNameOfTable = "wantedName";
db.Execute("CREATE TABLE @0 (id int IDENTITY (1,1) PRIMARY KEY, data ntext, dataOfAdd datetime)", myNameOfTable);

但我得到错误:

[令牌行号=1,令牌行偏移量=14,错误令牌=@0]

请帮助我 - 如何创建以名称为参数的表?

【问题讨论】:

  • 尝试使用String.Format
  • @Danil,仅仅因为你可以,并不意味着你应该......

标签: c# razor sql-server-ce webmatrix


【解决方案1】:

您通过选项给出表名,而不是使用 string concatenation/string.Format 来进行查询。您至少使用Paramerized Query 或更好地使用存储过程而不是内联查询,因为它们可能导致sql injection。您可以阅读这篇文章Stored procedures vs. inline SQL 进行比较。

db.Execute("CREATE TABLE " + myNameOfTable + " (id int IDENTITY (1,1) PRIMARY KEY, data ntext, dataOfAdd datetime)" );

您使用的语法可以使用string.Format实现

db.Execute(string.Format("CREATE TABLE {0} (id int IDENTITY (1,1) PRIMARY KEY, data ntext, dataOfAdd datetime)", myNameOfTable));

【讨论】:

  • 这正是我所需要的。非常感谢!
【解决方案2】:

我同意我宁愿在这里使用合法参数。您可以创建一个将表名传递给的存储过程,您会想到这样的事情:

CREATE PROCEDURE dbo.usp_CreateTable
    @TableName VARCHAR(50)
AS
BEGIN

    DECLARE @SqlScript NVARCHAR(4000)
    SET @SqlScript = 'CREATE TABLE ' + @TableName + ' (ID INT IDENTITY (1,1) NOT NULL)'

    EXEC sp_executesql @SqlScript

END

【讨论】:

  • 免责声明:我鄙视动态 SQL,我会避免这种情况,以及您在上面尝试使用 string.Format 完成的任何事情,就像瘟疫一样!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多