Я не могу определить из кода, используете ли вы драйвер ODB C для Snowflake или драйвер. NET для Snowflake. Драйвер ODB C поддерживает больше функций, чем драйвер. NET, но я думаю, что выполнение SP должно поддерживаться в обоих случаях.
Вам нужно будет выполнить вызов с помощью оператора SQL, который выполняет запрос (в отличие от методов, которые выполняют не-запрос). Он вернет таблицу с одной строкой с возвратом из SP. Он будет содержать один столбец с именем SP и скалярным значением SP (в основном то, что будет возвращено на листе SQL при запуске в веб-интерфейсе).
Вот пример SP для протестируйте, если вам нужен простой:
create or replace procedure EchoString(stringValue string)
returns VARCHAR
language JavaScript
as
$$
// Note that variables passed to Snowflake stored procedures
// muat be all CAPITAL letters when used in the body of the
// procedure code.
return STRINGVALUE
$$;
--Run the stored procedure to echo the value.
call EchoString('Echo this string.');
Вот как вызывать SP из проекта C# с использованием соединения ODB C:
OdbcConnection DbConnection = new OdbcConnection("DSN=Snowflake;pwd=******");
OdbcCommand DbCommandSetup = DbConnection.CreateCommand();
DbConnection.Open();
// These two lines are only required if you get a message about no running warehouse.
// It will depend on how your calling user is set up in Snowflake.
DbCommandSetup.CommandText = "use warehouse TEST;";
DbCommandSetup.ExecuteNonQuery();
OdbcCommand DbCommand = DbConnection.CreateCommand();
DbCommand.CommandText = "call TEST.PUBLIC.ECHOSTRING('Echo this string.')";
OdbcDataReader DbReader = DbCommand.ExecuteReader();
// Note: If you define a Snowflake SP, DB, or schema in mixed case without double quoting
// the name, Snowflake will uppercase it in the catalog. You can call it from here without
// converting to upper case as long as it's not double quoted (escaped \") in the string.