Возврат строки через хранимую процедуру с использованием C #

1

У меня есть таблица, в которой есть столбец, который автоматически создается на основе других столбцов в таблице. Я пытаюсь вставить данные в таблицу с помощью хранимой процедуры, а затем вернуть столбец автоматического генерации. В приведенной ниже хранимой процедуре @Num представляет собой автоматически созданный столбец.

Подход, который я здесь делаю, касается вставки данных в базу данных. То, что не работает, возвращает @Num из хранимой процедуры Insert. Я пытаюсь сделать это. Если да, то что я делаю неправильно? Если нет, есть ли альтернативный метод для этого?

Это мой С#. Когда я запускаю это, returnValue возвращается null.

   internal static bool InsertApplication(Something something)
   {
       object returnValue;
       string sql = "usp_InsertSproc";
       returnValue = DatabaseFactory.CreateDatabase("ConnectionString").ExecuteScalar(sql, new Object[] { something.First_Name, something.Last_Name });
   //I'd like to be able to access the @Num value from the Sproc here
   }

Это моя хранимая процедура:

ALTER PROCEDURE [dbo].[usp_InsertSproc]
(
@First_Name varchar(50),
@Last_Name varchar(50),
@Num Varchar(500) Output
)
AS
  SET NOCOUNT OFF;

  INSERT INTO [Table] ([First_Name], [Last_Name]) 
  VALUES (@First_Name, @Last_Name, )

  Return @Num

Вот как выглядит мой стол.

CREATE TABLE [Table]
(
   [First_Name] VARCHAR(50),
   [Last_Name] VARCHAR(50),
   [Num] AS ([dbo].[SetCMP]([Num]))
)
  • 5
    Где вы присваиваете значение @Num? ?
  • 1
    Вы должны SELECT @Num а не возвращать его.
Показать ещё 3 комментария
Теги:
sql-server
tsql
enterprise-library

1 ответ

2
Лучший ответ

Я предполагаю, что ваш стол выглядит примерно так:

CREATE TABLE [Table]
(
    [First_Name] VARCHAR(50),
    [Last_Name] VARCHAR(50),
    [Num] AS [First_Name] + [Last_Name] + '!'
)

Ваш С# должен быть в порядке. Измените хранимую процедуру на что-то вроде:

ALTER PROCEDURE [dbo].[usp_InsertSproc]
    @First_Name VARCHAR(50),
    @Last_Name VARCHAR(50)
AS
    SET NOCOUNT OFF;

    INSERT INTO [Table] ([First_Name], [Last_Name])
    OUTPUT inserted.[Num]
    VALUES (@First_Name, @Last_Name)
GO

EXEC [dbo].[usp_InsertSproc]
    @First_Name = 'Tom',
    @Last_Name = 'Hunter'

Изображение 174551

  • 0
    Num будет в вашей переменной returnValue .
  • 0
    Это прекрасно работает, за исключением того, что @Num генерируется функцией в своем определении, которая генерирует следующее сообщение об ошибке. На столбец «вставлен. Cmpl_Num» нельзя ссылаться в предложении OUTPUT, поскольку определение столбца содержит подзапрос или ссылается на функцию, которая выполняет пользовательский или системный доступ к данным. Я обновил свой пост с тем, как выглядит таблица.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню