Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中更改SQL Server存储过程_C#_Sql Server_Stored Procedures - Fatal编程技术网

C# 在C中更改SQL Server存储过程

C# 在C中更改SQL Server存储过程,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我想使用C在现有存储过程中添加一个新列,并将其保存回SQL Server e、 g.我有这个SP: ALTER PROCEDURE [dbo].[usp_SP1] AS BEGIN CREATE TABLE #tbl1(a int, b int) SELECT a, b FROM #tbl1 END 现在我想自动添加一个新列,例如xx类型的文本,因此输出为 ALTER PROCEDURE [dbo].[usp_SP1] AS BEGIN CREATE TAB

我想使用C在现有存储过程中添加一个新列,并将其保存回SQL Server

e、 g.我有这个SP:

ALTER PROCEDURE [dbo].[usp_SP1]
AS 
BEGIN
  CREATE TABLE #tbl1(a int, b int)

  SELECT
     a, b
  FROM #tbl1
END
现在我想自动添加一个新列,例如xx类型的文本,因此输出为

ALTER PROCEDURE [dbo].[usp_SP1]
AS BEGIN

    CREATE TABLE #tbl1
    (a int, b int, xx TEXT)

    SELECT
     a, b, xx
    FROM #tbl1
END
有人知道怎么做吗


谢谢

希望这是不完整的示例代码。您的SP将返回一个空结果集

为了回答一个潜在的问题:如何执行DDL语句,我建议这样回答

将SQL脚本创建为字符串。 创建到数据库的SqlConnection并将其打开。 创建一个SqlCommand对象。将其文本属性设置为脚本字符串。将其连接属性设置为SqlConnection对象。 在SqlCommand对象上调用ExecuteOnQuery方法。 除了执行create/alter脚本不会返回任何结果之外,这与运行查询类似

per JonH注:没有提到使用命令参数或存储过程参数,所以我没有提到这两个参数。这是一种短而简单的方法,可以从C中修改存储过程,也就是说,运行SQL脚本


可以使用您选择的任何方法构造脚本字符串。如果您谈论的是从数据库动态解析存储过程,用修改过的部分重新组装它,然后重新提交它,那么您可能应该修改询问问题的方式。你必须知道你剧本的结构;在某些现有SP中,没有通用的方法在未指定的位置插入列。

希望这是不完整的示例代码。您的SP将返回一个空结果集

为了回答一个潜在的问题:如何执行DDL语句,我建议这样回答

将SQL脚本创建为字符串。 创建到数据库的SqlConnection并将其打开。 创建一个SqlCommand对象。将其文本属性设置为脚本字符串。将其连接属性设置为SqlConnection对象。 在SqlCommand对象上调用ExecuteOnQuery方法。 除了执行create/alter脚本不会返回任何结果之外,这与运行查询类似

per JonH注:没有提到使用命令参数或存储过程参数,所以我没有提到这两个参数。这是一种短而简单的方法,可以从C中修改存储过程,也就是说,运行SQL脚本


可以使用您选择的任何方法构造脚本字符串。如果您谈论的是从数据库动态解析存储过程,用修改过的部分重新组装它,然后重新提交它,那么您可能应该修改询问问题的方式。你必须知道你剧本的结构;在某些现有SP中,没有在未指定位置插入列的常规方法。

定义数据库对象和存储过程对象后,您可以直接从托管代码创建SP:

StoredProcedure sp = new StoredProcedure(myDB, "NameOfSproc");
sp.TextMode=False;
sp.AnsiNullsStatus=False;
sp.QuotedIdentifierStatus=false;

//add some parameters
StoredProcedureParameter p;
p = new StoredProcedureParameter(sp, "@MyID", Int);

//add the parameters to the sproc
sp.Parameters.Add(p);
sp.TextBody = "SELECT blah FROM MyTable WHERE ID=@myID";
sp.CreatE();

定义数据库对象和存储过程对象后,可以直接从托管代码创建sp:

StoredProcedure sp = new StoredProcedure(myDB, "NameOfSproc");
sp.TextMode=False;
sp.AnsiNullsStatus=False;
sp.QuotedIdentifierStatus=false;

//add some parameters
StoredProcedureParameter p;
p = new StoredProcedureParameter(sp, "@MyID", Int);

//add the parameters to the sproc
sp.Parameters.Add(p);
sp.TextBody = "SELECT blah FROM MyTable WHERE ID=@myID";
sp.CreatE();

你在问什么?如何使用SQL修改存储过程,或者如何向服务器发送SQL命令?@Adam Robinson-他不是问这两个问题,而是问如何从托管代码C中创建实际参数。@Adam Robinson-Adam可以通过修改或创建来完成。所以没关系。关键是OP试图在C中添加一个存储过程参数。我不是说我会这样做,我只是说这是他/她想要做的。你在问什么?如何使用SQL修改存储过程,或者如何向服务器发送SQL命令?@Adam Robinson-他不是问这两个问题,而是问如何从托管代码C中创建实际参数。@Adam Robinson-Adam可以通过修改或创建来完成。所以没关系。关键是OP试图在C中添加存储过程参数。我不是说我会这样做,我只是说这是他/她想要做的。这是如何运行存储过程,而不是如何从托管代码在存储过程上实际创建参数。@John-为什么不?假设他正在以其他方式防止注入攻击,那么以这种方式修改存储过程就可以了。虽然,如果在C或任何代码中构造/更改存储过程会让您感到紧张,只需将所有这些作为逗号分隔的参数传入,在过程中将其拆分,然后将结果吐回。@MAW74656-我误读了这些步骤,我确实看到Suncat2000提到将文本属性设置为脚本,因此是的,也可以。Suncat2000你能对帖子进行一个小的编辑,这样我就可以重新提交投票了吗?我添加了一个注释,澄清了我的帖子和原始问题中没有任何内容是使用参数解决的。这是如何运行存储过程,而不是如何从托管代码中实际创建存储过程中的参数。@John-为什么不?假设他正在以其他方式防止注入攻击,那么以这种方式修改存储过程就可以了。虽然,如果公司
在C或任何代码中指令/更改存储过程都会让您感到紧张,只需将所有这些作为逗号分隔的参数传入,在过程中将其拆分,然后将结果吐回即可。@MAW74656-我误读了这些步骤,我确实看到Suncat2000提到要将文本属性设置为脚本,所以“是”也可以。Suncat2000你能对帖子做一个小的编辑,这样我就可以重新提交投票了吗?我添加了一个说明,澄清我的帖子和原始问题中没有使用参数来解决任何问题。