Как использовать запрос с кавычками внутри родительского запроса ⇐ C#

Место общения программистов C#
Anonymous
Как использовать запрос с кавычками внутри родительского запроса

Сообщение Anonymous »

У меня есть вариант использования, когда мне нужно обновить значение столбца, которое само по себе является запросом.
Структура таблицы:

Код: Выделить всё

CREATE TABLE MyTable
(
ID int,
Query varchar(max)
)
Запрос на обновление:

Код: Выделить всё

UPDATE MyTable
SET Query = '{{child query}}'
WHERE ID = @ID;
Дочерний запрос:

Код: Выделить всё

DECLARE @ServiceIDsTableString AS varchar(20)
SET @ServiceIDsTableString = @ServiceIDsString

DECLARE @ServiceIDs TABLE (ServiceID INT PRIMARY KEY CLUSTERED)
DECLARE @OrderID varchar(10), @Pos int

SET @ServiceIDsTableString = LTRIM(RTRIM(@ServiceIDsTableString)) + ','
SET @Pos = CHARINDEX(',', @ServiceIDsTableString, 1)

IF REPLACE(@ServiceIDsTableString, ',', '')  ''
BEGIN
WHILE @Pos > 0
BEGIN
SET @OrderID = LTRIM(RTRIM(LEFT(@ServiceIDsTableString, @Pos - 1)))

IF @OrderID  ''
BEGIN
INSERT INTO @ServiceIDs (ServiceID)
VALUES (CAST(@OrderID AS int))
END

SET @ServiceIDsTableString = RIGHT(@ServiceIDsTableString, LEN(@ServiceIDsTableString) - @Pos)
SET @Pos = CHARINDEX(',', @ServiceIDsTableString, 1)
END
END

DECLARE @CurrentTime_UTC AS DateTime
SELECT @CurrentTime_UTC = GETUTCDATE()

DECLARE @ProviderTripIDs TABLE (ProviderTripID varchar(255))

INSERT INTO @ProviderTripIDs
SELECT ProviderTripID
FROM MfTrips mt WITH (nolock)
INNER JOIN Mfs m WITH (nolock) ON m.MfID = mt.MfID
INNER JOIN MfDatas md WITH (nolock) ON md.MfDataID = m.MfDataID
INNER JOIN locations lp WITH (nolock) ON mt.PickLocationID = lp.LocationID
INNER JOIN Locations ld WITH (nolock) ON mt.DropLocationID = ld.LocationID
INNER JOIN Customers c WITH (nolock) ON mt.CustomerID = c.CustomerID
INNER JOIN Reservations r WITH (nolock) ON r.ReservationID = mt.ReservationID
WHERE
m.active = 1
AND r.ParentReservationID = 0
AND m.date = @Date
AND mt.ProviderID = 1
AND mt.MfTripStatusID = 1
AND mt.ModeID = 3
AND mt.PassengerTypeID IN (SELECT PassengerTypeID
FROM PassengerTypes WITH (nolock)
WHERE CorePassengerTypeID = 1)
AND mt.ServiceID IN (SELECT ServiceID FROM @ServiceIDs)
AND md.MfDataTypeID = dbo.GetCurrentMfDataTypeID(m.Date)
AND (mt.WillCall = 0 OR mt.WillCallReadyAt >= '1/1/2000')
AND m.description = 'Unassigned'
AND mt.LevelOfServiceID = 1
AND mt.TripPurposeID NOT IN (1)
AND dbo.GetAge(c.BirthDate, m.Date) < 75
AND (dbo.GetAge(c.BirthDate, m.Date) > 18 or
1 = (SELECT TOP 1 1
FROM MfTripExtraPassengers imtep WITH (nolock)
WHERE imtep.MfTripID = mt.MfTripID
AND imtep.Deleted_UTC IS NULL
AND dbo.GetAge(imtep.BirthDate, m.Date) > 18))
AND (SELECT COUNT(*)
FROM MfTripExtraPassengers imtep WITH (nolock)
WHERE imtep.MfTripID = mt.MfTripID
AND imtep.Deleted_UTC IS NULL)  m.Date then  mt.ScheduledPickWindowBegin AT TIME ZONE (select Value from ClientSettings where ClientSettingID = 22)     when mt.scheduledDropWindowEnd 

Подробнее здесь: [url]https://stackoverflow.com/questions/79175563/how-to-use-query-with-quotes-inside-a-parent-query[/url]

Вернуться в «C#»