我希望从一些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执行?
答案 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();
}