如何将 SQL 值插入 SQL 命令以创建 table?
How do I insert SQL values into an SQL Command to create a table?
我正在尝试从 Visual Studio 在 SQL 中创建一个 table,但我不断收到一个异常,内容为“'Incorrect Syntax Near '@tableName '.'" 我是否错误地使用了参数值,我尝试仅使用 Parameters.Add("@tableName", SQLDbType.VARCHAR) 并手动添加值,但我得到了同样的例外。
public string CreateTable(string tableName)
try
{
using (SqlConnection conn = new SqlConnection(this.connectionstring))
{
SqlCommand cmd = new SqlCommand($"CREATE TABLE @tableName(indicatorid INT IDENTITY(1,1) NOT NULL PRIMARY KEY, value REAL, date DATE, ticker VARCHAR(20))", conn);
cmd.Parameters.AddWithValue("@tableName", tableName);
conn.Open();
var result = cmd.ExecuteNonQuery();
conn.Close();
return "Database Initialized";
}
}
catch
{
return"Failure Creating Test Table";
}
您可以使用带参数的存储过程
using (SqlCommand cmd = new SqlCommand("sp_Create_New_Table", con)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@tableName", tableName);
conn.Open();
var result = cmd.ExecuteNonQuery();
conn.Close();
return "Database Initialized";
}
为此您需要使用动态 SQL。
- 注意: 您必须使用
QUOTENAME
正确转义 table 名称
- 我建议你不要盲目捕获所有异常。让它们传递给调用函数,调用函数可以决定如何显示或记录错误。
- 参数应该是
nvarchar(128)
- 注意使用
@""
逐字 multi-line 字符串
public void CreateTable(string tableName)
{
const string query = @"
DECLARE @sql nvarchar(max) = '
CREATE TABLE ' + QUOTENAME(@tableName) + '(
indicatorid INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
value REAL,
date DATE,
ticker VARCHAR(20)
)
';
EXEC sp_executesql @sql;
";
using (SqlConnection conn = new SqlConnection(this.connectionstring))
using (SqlCommand cmd = new SqlCommand(query, conn)
{
cmd.Parameters.Add("@tableName", SqlDbType.NVarChar, 128).Value = tableName;
conn.Open();
cmd.ExecuteNonQuery();
}
}
我正在尝试从 Visual Studio 在 SQL 中创建一个 table,但我不断收到一个异常,内容为“'Incorrect Syntax Near '@tableName '.'" 我是否错误地使用了参数值,我尝试仅使用 Parameters.Add("@tableName", SQLDbType.VARCHAR) 并手动添加值,但我得到了同样的例外。
public string CreateTable(string tableName)
try
{
using (SqlConnection conn = new SqlConnection(this.connectionstring))
{
SqlCommand cmd = new SqlCommand($"CREATE TABLE @tableName(indicatorid INT IDENTITY(1,1) NOT NULL PRIMARY KEY, value REAL, date DATE, ticker VARCHAR(20))", conn);
cmd.Parameters.AddWithValue("@tableName", tableName);
conn.Open();
var result = cmd.ExecuteNonQuery();
conn.Close();
return "Database Initialized";
}
}
catch
{
return"Failure Creating Test Table";
}
您可以使用带参数的存储过程
using (SqlCommand cmd = new SqlCommand("sp_Create_New_Table", con)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@tableName", tableName);
conn.Open();
var result = cmd.ExecuteNonQuery();
conn.Close();
return "Database Initialized";
}
为此您需要使用动态 SQL。
- 注意: 您必须使用
QUOTENAME
正确转义 table 名称
- 我建议你不要盲目捕获所有异常。让它们传递给调用函数,调用函数可以决定如何显示或记录错误。
- 参数应该是
nvarchar(128)
- 注意使用
@""
逐字 multi-line 字符串
public void CreateTable(string tableName)
{
const string query = @"
DECLARE @sql nvarchar(max) = '
CREATE TABLE ' + QUOTENAME(@tableName) + '(
indicatorid INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
value REAL,
date DATE,
ticker VARCHAR(20)
)
';
EXEC sp_executesql @sql;
";
using (SqlConnection conn = new SqlConnection(this.connectionstring))
using (SqlCommand cmd = new SqlCommand(query, conn)
{
cmd.Parameters.Add("@tableName", SqlDbType.NVarChar, 128).Value = tableName;
conn.Open();
cmd.ExecuteNonQuery();
}
}