从C#中删除并创建存储过程

时间:2016-02-17 18:32:19

标签: c# sql-server

我希望从一些c#代码中创建一个临时存储过程。虽然它是一个临时存储过程,但是如果它已经存在则希望删除它以确保连接是否保持打开状态当我第二次尝试创建它时不会出现问题。

我有以下几行SQL:

IF OBJECT_ID('tempdb..#usp_GetSomething') IS NOT NULL
BEGIN
    DROP PROC #usp_GetSomething
END
GO

CREATE PROCEDURE #usp_GetSomething
    @Table VARCHAR(100) 
AS  
BEGIN
    SELECT @Table
END

这是有效的SQL并在Management Studio中执行。 但是,当我使用以下C#执行它时:

var cmd = new SqlCommand(theSQL, sqlConnection) {CommandType = CommandType.Text};
cmd.ExecuteNonQuery();

我收到以下错误:

'GO'附近的语法不正确。必须声明标量变量“@Table”。

我做错了什么?如何让SQL执行?

3 个答案:

答案 0 :(得分:1)

你需要DMO / SMO命名空间才能做到这一点。

简单的SqlCommand不会帮忙。

https://msdn.microsoft.com/en-us/library/ms162169(v=sql.105).aspx

答案 1 :(得分:0)

  

这是有效的SQL

这是错误的。

GO不是SQL关键字。它是SSMS和IIRC SQLCmd认可的批量分离器。

从代码中,您必须将此SQL拆分为多个语句(在每个GO中)并单独提交。

答案 2 :(得分:-1)

使用StoredProcedure代替下面的命令文字:

using (var conn = new SqlConnection(connectionString))
using (var command = new SqlCommand("ProcedureName", conn) { 
                           CommandType = CommandType.StoredProcedure }) {
   conn.Open();
   command.ExecuteNonQuery();
   conn.Close();
}