SQL Хранимый процесс, выберите данные из вторичных таблиц - PullRequest
0 голосов
/ 17 сентября 2010

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

В основном у меня есть одна таблица, в которой мы храним отображения по идентификатору.В этой таблице я собрал поле, в котором должна храниться конкатенация этих данных, что прекрасно работает.Проблема в том, что он хранит идентификатор сопоставления, а не имя, которое принадлежит этому идентификатору.

Мой сохраненный процесс:

`USE [SNHULeads]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[spSNHUCodeCreate]
(
@Source numeric(18,0),
@ProgramName numeric(18,0),
@Division numeric(18,0),
@Medium numeric(18,0),
@content varchar(50),
@URL varchar(500) = 'N/A',
@redirect varchar(100),
@Cost numeric(18,0),
@Notes varchar(500) = 'N/A',
@StartDate datetime,
@EndDate datetime,
@oper varchar(50),
@id varchar(50)
)

AS

DECLARE @SNHUCode numeric(18,0)
DECLARE @DateCreated datetime 
SET @SNHUCode = (SELECT MAX(snhuCODE) + 1 FROM [dbo].[VendorProgram])
SET @DateCreated = GETDATE()`

IF @URL != 'N/A'
BEGIN
    SET @URL = 'http://www.snhu.edu/' + @URL + '.asp?utm_source=' +    CONVERT(varchar(50), @Source) + '&utm_medium=' + CONVERT(varchar(50), @Medium) + '&utm_content=' + CONVERT(varchar(50), @content) + '&utm_campaign=' + CONVERT(varchar(50), @ProgramName) + '&SNHU_Segment=' + CONVERT(varchar(50), @Division)
END

INSERT INTO [SNHULeads].[dbo].[VendorProgram]
       ([vendorID]
       ,[programID]
       ,[divisionID]
       ,[mediumID]
       ,[snhuCODE]
       ,[content]
       ,[url]
       ,[cost]
       ,[Notes]
       ,[StartDate]
       ,[EndDate]
       ,[redirect]
       ,[DateCreated])
 VALUES
       (@Source
       ,@ProgramName
       ,@Division
       ,@Medium
       ,@SNHUCode
       ,@content
       ,@URL
       ,@Cost
       ,@Notes
       ,@StartDate
       ,@EndDate
       ,@redirect
       ,@DateCreated)`

По сути, с помощью столбца URL я ловлюидентификаторы, которые я отправляю, но это не то, что я хочу.Кажется, я не могу найти способ выбрать имя, соответствующее @Source ID, который я отправляю.

Я пробовал что-то вроде: объявить новую переменную в proc, а затем выбрать ее следующим образом:

DECLARE @sourceName varchar(50) SET @sName = (SELECT Leads.dbo.Vendors.Source WHERE mappingID = @Source)

Это дает мне ошибку: «Не удалось связать многоэлементный идентификатор« Vendors.mappingID ».».

Есть какая-нибудь помощь для меня?Не слишком критикуйте SQL, это явно не моя сильная сторона.

1 Ответ

0 голосов
/ 17 сентября 2010

Хорошо, я не могу быть уверен, что это то, что вы хотите, но предполагая, что @source относится к столбцу MappingId в таблице с именем Vendors в базе данных с именем Leads;тогда этот SQL установит переменную с именем @sourceName в соответствующее имя источника.Затем вы можете вставить эти данные в другую таблицу.

Это то, что вы искали?

    Declare @sourceName varchar(50)

    Select @sourceName = SourceName
    From Leads.dbo.Vendors
    Where MappingId = @Source

Примечание. В этом SQL предполагается, что для каждой @source существует только одна строка.прошло.

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