CREATEPROCEDUREスクリプトを実行する小さなアプリを開発しようとしています。簡単な例:
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'ap_get_roles_in_system')
BEGIN
DROP Procedure [dbo].[ap_get_roles_in_system]
END
GO
CREATE PROCEDURE [dbo].[ap_get_roles_in_system]
(
@system_id int
)
AS
SELECT * FROM roles
GO
GRANT EXEC ON [dbo].[ap_get_roles_in_system] TO PUBLIC
GO
このテキストを文字列にロードし、ExecuteNonQuery()を使用して実行すると、ストアドプロシージャを削除する最初の項目は正常に機能しますが、Createを実行する代わりに、ストアドのパラメーターで構文エラーが検出されます。プロシージャ、すなわち:それは宣言されていません。
つまり、CREATEを実行しようとするのではなく、CREATEではなくスクリプトとしてスクリプトを実行しようとしているのです。正しい言い回しが何であるかわからない。
上記のスクリプトは、SQLManagementStudioに貼り付けるとうまく機能します。
これが私が実行しているコードです:
public string RunSql(string Sql)
{
string result = string.Empty;
_conn.Open();
SqlCommand cmd = new SqlCommand(Sql, _conn);
cmd.CommandType = CommandType.Text;
try
{
cmd.ExecuteNonQuery();
result = "Succeeded";
}
catch (SqlException ex)
{
result = ex.Message;
}
return result;
}