Как использовать результат хранимых процедур в той же хранимой процедуре для другой функции - PullRequest
0 голосов
/ 24 декабря 2018

Я создал две таблицы

tbl1 :

CREATE TABLE [dbo].[tbl1] 
(
    [Costumer ID] [INT] NOT NULL,
    [Name of the Costumer] [NVARCHAR](50) NOT NULL,
    [Contact Number 1] [NCHAR](11) NULL,
    [Contact Number 2] [NCHAR](11) NOT NULL,
    [Email Id] [NVARCHAR](50) NULL,
    [Address] [NVARCHAR](1000) NOT NULL,
    [Dust] [NUMERIC](18, 0) NOT NULL,
    [M.sand] [NUMERIC](18, 0) NOT NULL,
    [6MM] [NUMERIC](18, 0) NOT NULL,
    [10MM] [NUMERIC](18, 0) NOT NULL,
    [40MM] [NUMERIC](18, 0) NOT NULL,
    [Bolders] [NUMERIC](18, 0) NULL
) ON [PRIMARY]
GO

tbl2 :

CREATE TABLE [dbo].[tbl2]
(
    [DCN] [INT] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    [Party] [NVARCHAR](50) NULL,
    [Material] [NVARCHAR](50) NULL,
    [Rate] [NVARCHAR](4000) NULL,

    CONSTRAINT [UK_tbl_intedrlink_dcno] 
        PRIMARY KEY CLUSTERED ([DCN] ASC)
) ON [PRIMARY]
GO

и создалхранимая процедура в виде пары

CREATE PROCEDURE [dbo].[sp1]
    @mat NVARCHAR(1000) = NULL,
    @party NVARCHAR(1000) = NULL
AS
BEGIN
    DECLARE @sql NVARCHAR(4000); 
    DECLARE @params NVARCHAR(4000); 
    DECLARE @rate NVARCHAR(1000); 

    SET @sql ='select  ['+@mat+']   from tbl1'+ ' where [Name of the Costumer] = @party' set @params = '@party nvarchar (1000)'  exec sp_executesql @sql, @params,@party= @party

    INSERT INTO tbl2([Party], [Material], rate) 
        SELECT @party, @mat, @rate
END

Когда я выполняю хранимую процедуру, я хочу вставить значения в tbl2, который направлен от tbl.

Но когда я выполняю хранимую процедуру, я получаю результат следующим образом

enter image description here

В tbl2, rateстолбец добавляется как ноль, где я хотел взять результат sp1 (хранимая процедура) и вставить значение в столбец rate.

Я не установил @rate в значение,Я хочу установить результат exec sp_executesql как значение @rate

Может кто-нибудь помочь решить проблему?

1 Ответ

0 голосов
/ 24 декабря 2018
CREATE PROCEDURE [dbo].[sp1]
    @mat NVARCHAR(1000) = NULL,
    @party NVARCHAR(1000) = NULL
AS
BEGIN
    DECLARE @sql NVARCHAR(4000); 
    DECLARE @params NVARCHAR(4000); 
    DECLARE @rate NVARCHAR(1000); 

    SET @sql ='select  @rate = ['+@mat+']   from tbl1'+ ' where [Name of the Costumer] = @party' 
    SET @params = '@party nvarchar (1000), @rate NVARCHAR(1000) OUTPUT'  

    EXEC sp_executesql @sql, @params,@party= @party,@rate = @rate OUTPUT

    INSERT INTO tbl2([Party], [Material], rate) 
        SELECT @party, @mat, @rate
END

Вы можете добавить еще один параметр к sp_executesql хранимой процедуре.

Подобно @rate как параметру OUTPUT, и вы получите возвращаемое значение из выполненной хранимой процедуры для направления в объявленную вами.переменная.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...