Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我们必须这样做。但是,我仍然建议您检查估计的执行计划,并在实际循环和使用游标之间进行比较。我会说,您是否尝试过它的性能如何?跑步需要多长时间?但是是的,看起来也不错。只要确保您有order和order_item的索引,为什么不让您的order_item内部_Sql_Performance_Tsql_Sql Server 2012_Database Performance - Fatal编程技术网

Sql 我们必须这样做。但是,我仍然建议您检查估计的执行计划,并在实际循环和使用游标之间进行比较。我会说,您是否尝试过它的性能如何?跑步需要多长时间?但是是的,看起来也不错。只要确保您有order和order_item的索引,为什么不让您的order_item内部

Sql 我们必须这样做。但是,我仍然建议您检查估计的执行计划,并在实际循环和使用游标之间进行比较。我会说,您是否尝试过它的性能如何?跑步需要多长时间?但是是的,看起来也不错。只要确保您有order和order_item的索引,为什么不让您的order_item内部,sql,performance,tsql,sql-server-2012,database-performance,Sql,Performance,Tsql,Sql Server 2012,Database Performance,我们必须这样做。但是,我仍然建议您检查估计的执行计划,并在实际循环和使用游标之间进行比较。我会说,您是否尝试过它的性能如何?跑步需要多长时间?但是是的,看起来也不错。只要确保您有order和order_item的索引,为什么不让您的order_item内部联接order查询一次临时表或表变量,并在游标和sp_send_dbmail函数中使用它,而不是多次点击数据库times@JamieD77你完全正确! DECLARE @email NVARCHAR(254); DECLARE email_c


我们必须这样做。但是,我仍然建议您检查估计的执行计划,并在实际循环和使用游标之间进行比较。我会说,您是否尝试过它的性能如何?跑步需要多长时间?但是是的,看起来也不错。只要确保您有order和order_item的索引,为什么不让您的
order_item内部联接order
查询一次临时表或表变量,并在游标和sp_send_dbmail函数中使用它,而不是多次点击数据库times@JamieD77你完全正确!
DECLARE @email NVARCHAR(254);

DECLARE email_cursor CURSOR READ_ONLY FOR
    SELECT DISTINCT o.email
    FROM order_item AS i
        INNER JOIN order AS o ON i.order_id = o.order_id
    WHERE i.send_email = '1';

OPEN email_cursor;
FETCH NEXT FROM email_cursor INTO @email;

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC sp_send_dbmail
        @profile_name = 'mail'
        @recipients = @email,
        @subject = 'Order Items',
        @body = 
        N'<table>' +
            N'<tr>' +
                N'<th>Order</th>' +
                N'<th>Item</th>' +
            N'</tr>' +
            CAST (( 
                SELECT 
                     i.order_id,
                     i.name
                FROM order_item AS i
                    INNER JOIN order AS o ON i.order_id = o.order_id
                WHERE i.send_email = '1'
                  AND o.email = @email
                FOR XML PATH('tr'), TYPE 
            ) AS NVARCHAR(MAX) ) +
        N'</table>',
        @body_format = 'HTML';
END;
DECLARE @temp TABLE(
    email NVARCHAR(254),
    order_id INT,
    name NVARCHAR(MAX)
)

INSERT INTO @temp
SELECT 
    o.email
    i.order_id,
    i.name
FROM order_item AS i
    INNER JOIN order AS o ON i.order_id = o.order_id
WHERE i.send_email = '1'.

DECLARE @email NVARCHAR(254);

DECLARE email_cursor CURSOR READ_ONLY FOR
    SELECT DISTINCT email
    FROM @temp

OPEN email_cursor;
FETCH NEXT FROM email_cursor INTO @email;

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC sp_send_dbmail
        @profile_name = 'mail'
        @recipients = @email,
        @subject = 'Order Items',
        @body = 
        N'<table>' +
            N'<tr>' +
                N'<th>Order</th>' +
                N'<th>Item</th>' +
            N'</tr>' +
            CAST (( 
                SELECT 
                     order_id,
                     name
                FROM @temp
                WHERE email = @email
                FOR XML PATH('tr'), TYPE 
            ) AS NVARCHAR(MAX) ) +
        N'</table>',
        @body_format = 'HTML';
END;
DECLARE @temp TABLE(
    email NVARCHAR(254),
    order NVARCHAR (MAX)
)

INSERT INTO @temp (email, order)
SELECT 
    o.email,
    c.order
FROM order AS o
CROSS APPLY (
    SELECT CAST (( 
            SELECT 
                 oi.order_id AS td,
                 oi.name AS td
            FROM order_item oi
            WHERE oi.order_id = o.order_id
            FOR XML PATH('tr'), TYPE 
        ) AS NVARCHAR(MAX) )
) c (order)
WHERE i.send_email = 1

DECLARE @email NVARCHAR(254),

DECLARE email_cursor CURSOR LOCAL FAST_FORWARD
FOR
SELECT email, order
FROM @temp

 OPEN email_cursor;
 FETCH NEXT FROM email_cursor INTO @email, @order

WHILE ( @@FETCH_STATUS = 0 )
BEGIN
    EXEC sp_send_dbmail
        @profile_name = 'mail'
        @recipients = @email,
        @subject = 'Order Items',
        @body = 
            N'<table>' +
            N'<tr>' +
            N'<th>Order</th>' +
            N'<th>Item</th>' +
            N'</tr>' +
            @order +
            N'</table>',
    @body_format = 'HTML';

    FETCH NEXT FROM email_cursor INTO @email, @order
END;

CLOSE email_cursor
DEALLOCATE email_cursor