Sql 连接存储过程中的字符串

Sql 连接存储过程中的字符串,sql,sql-server,Sql,Sql Server,我正在从Python调用SQL Server中的一个存储过程。但是,根据Python中的条件,需要传入一个联合字符串 以下是主存储过程查询的外观: BEGIN SET NOCOUNT ON; SELECT mbh.id, COALESCE(oc.DowntimeReasonLevel1Name, 'Nothing for Now') AS 'DowntimeReasonLevel1Name', COALESCE(osw.DowntimeReasonLevel

我正在从Python调用SQL Server中的一个存储过程。但是,根据Python中的条件,需要传入一个联合字符串

以下是主存储过程查询的外观:

BEGIN
SET NOCOUNT ON;

SELECT      
    mbh.id,
    COALESCE(oc.DowntimeReasonLevel1Name, 'Nothing for Now') AS 'DowntimeReasonLevel1Name',
    COALESCE(osw.DowntimeReasonLevel2Name, 'Nothing for Now') AS 'DowntimeReasonLevel2Name',
    CAST(SUM(DATEDIFF(SECOND, de.start_time, de.end_time))/60.0 AS decimal (8,2)) as Duration
FROM    
    mixer_downtime_event mde
JOIN 
    downtime_event de ON de.id = mde.downtime_event_id
JOIN 
    oee_status_word osw ON osw.id = de.oee_status_word_id
JOIN 
    oee_category oc ON oc.id = osw.oee_category_id
JOIN 
    mixer_batch_history mbh ON mbh.id = mde.mixer_batch_history_id
JOIN 
    compound_process cp ON cp.id = mbh.compound_process_id
JOIN 
    compound c ON c.id = cp.compound_id
WHERE 
    mde.mixer_batch_history_id IN (@IdList)
    AND osw.id <> 9000
    AND DATEDIFF(MINUTE, de.start_time, de.end_time) > 0
GROUP BY 
    mbh.id, DowntimeReasonLevel1Name, DowntimeReasonLevel2Name
--+
--@downtimeUnion
END
或者可以是空白字符串


如何在存储过程中将此查询连接在一起?

@Duration
作为参数传递,然后添加:

UNION ALL
SELECT NULL,
       'Changeover' AS DowntimeReasonLevel1Name,
       'Changeover' AS DowntimeReasonLevel2Name,
        @Duration as Duration
如果希望这是有条件的,那么可以让
@Duration
作为条件的标志执行双重任务:

UNION ALL
SELECT NULL,
       'Changeover' AS DowntimeReasonLevel1Name,
       'Changeover' AS DowntimeReasonLevel2Name,
        v.Duration as Duration
FROM (VALUES (@Duration)) v(Duration)
WHERE v.Duration IS NOT NULL;

你不能。您现有的查询有四列,而传入的值仅占三列。@GordonLinoff,对不起,忘记更新查询的这一部分,我没有使用mbh.id,因此它的两端最终将具有相同的列数。!!我遇到的问题是将整个联合部分与主查询连接在一起。因为,它必须是完全动态的!(根据条件,我可以将转换或试验等列为一列)
UNION ALL
SELECT NULL,
       'Changeover' AS DowntimeReasonLevel1Name,
       'Changeover' AS DowntimeReasonLevel2Name,
        v.Duration as Duration
FROM (VALUES (@Duration)) v(Duration)
WHERE v.Duration IS NOT NULL;