sql發郵件
Database Mail代替了SQL Mail,它使用一個簡單郵件傳輸協議(SMTP)伺服器,而不是SQL Mail所要求的MAPI賬號來發送電子郵件。 這允許你的組織發送帶附件和查詢結果的電子郵件,附加查詢結果,以及格式化HTML電子郵件。你還可以用它設定許多其它配置,而不需要你擁有一台Exchange伺服器或配置任何類型的MAPI工作區。 使用Database Mail的好處除完全以SMTP為基礎外,Database Mail還具有許多其它優點:
它在資料庫引擎以外運行,因此對資料庫引擎的壓力最小。
它支持群集,完全支持群集環境。
它的用戶資料(Profile)允許使用冗餘SMTP伺服器。(我將在本文後部分詳細討論這一點。)
它允許你以參數的形式向存儲過程發送查詢文本,存儲過程將執行查詢並在電子郵件中發送結果。
消息通過一個Service Broker隊列非同步傳送,因此你在發送電子郵件時不必等待回應。 它為電子郵件發送提供多重安全保護,如一個控制附件擴展名的過濾器和一個附件大小管理器。 建立和使用Database Mail在建立一個Database Mail解決方案前,你需要進行一些規劃工作。首先,你必須具有一台有效的SMTP伺服器來傳送電子郵件。如果你沒有SMTP伺服器,請參閱微軟知識庫文章308161了解建立SMTP伺服器的相關信息。如果你無法確定組織是否擁有SMTP伺服器,詢問你的網路管理員獲得機器名稱或伺服器的IP地址。你的網路管理員可能需要對伺服器進行配置,以便SQL Server能夠發送電子郵件。 在Database Mail中,賬戶(Account)保存資料庫引擎用來發送電子郵件消息的信息。一個賬戶只為一台電子郵件伺服器保存信息,如賬戶名、電子郵件地址、回復電子郵件地址、伺服器名稱或IP地址,以及一些可選的安全設置。 要發送一封Database Mail電子郵件,必須使用一個用戶資料(Profile)。用戶資料為一個或幾個賬戶設立。這種用戶資料-賬戶設置非常有用。它允許你將幾個賬戶和一個用戶資料聯系起來,這意味著你可以將幾台電子郵件伺服器和一個用戶資料聯系起來。 因此,當你試圖發送一封電子郵件時,系統會嘗試用戶資料中的每個賬戶,直到消息被成功發送出去。如果一台或幾台SMTP伺服器出現故障,這種設置就十分有用。它還允許你開發發送電子郵件的應用程序代碼,而不必擔心針對不同的環境修改Profile名稱。你可以在開發和生產環境中使用相同的Profile名稱,唯一的差別在於用戶資料中包含的賬戶有所不同。 該是時候了解如何建立一個Database Mail賬戶了。在我們的例子中,我假設你正坐在一台你具有系統管理員訪問許可權的開發機器前。如果你沒有系統管理員許可權,你需要成為msdb資料庫DatabaseMailUserRole的一員。 下面的腳本建立一些我在整個實例中都要用到的變數。
② sql server 2005 如何用存儲過程發送郵件
A.
使用簡單過程
以下存儲過程將從視圖中返回所有雇員(提供姓和名)、職務以及部門名稱。此存儲過程不使用任何參數。
復制
USE
AdventureWorks;
GO
IF
OBJECT_ID
(
'HumanResources.uspGetAllEmployees',
'P'
)
IS
NOT
NULL
DROP
PROCEDURE
HumanResources.uspGetAllEmployees;
GO
CREATE
PROCEDURE
HumanResources.uspGetAllEmployees
AS
SET
NOCOUNT
ON;
SELECT
LastName,
FirstName,
JobTitle,
Department
FROM
HumanResources.vEmployeeDepartment;
GO
uspGetEmployees
存儲過程可通過以下方式執行:
復制
EXECUTE
HumanResources.uspGetAllEmployees;
GO
--
Or
EXEC
HumanResources.uspGetAllEmployees;
GO
--
Or,
if
this
procere
is
the
first
statement
within
a
batch:
HumanResources.uspGetAllEmployees;
B.
使用帶有參數的簡單過程
下面的存儲過程只從視圖中返回指定的雇員(提供名和姓)及其職務和部門名稱。此存儲過程接受與傳遞的參數精確匹配的值。
復制
USE
AdventureWorks;
GO
IF
OBJECT_ID
(
'HumanResources.uspGetEmployees',
'P'
)
IS
NOT
NULL
DROP
PROCEDURE
HumanResources.uspGetEmployees;
GO
CREATE
PROCEDURE
HumanResources.uspGetEmployees
@LastName
nvarchar(50),
@FirstName
nvarchar(50)
AS
SET
NOCOUNT
ON;
SELECT
FirstName,
LastName,
JobTitle,
Department
FROM
HumanResources.vEmployeeDepartment
WHERE
FirstName
=
@FirstName
AND
LastName
=
@LastName;
GO
uspGetEmployees
存儲過程可通過以下方式執行:
復制
EXECUTE
HumanResources.uspGetEmployees
N'Ackerman',
N'Pilar';
--
Or
EXEC
HumanResources.uspGetEmployees
@LastName
=
N'Ackerman',
@FirstName
=
N'Pilar';
GO
--
Or
EXECUTE
HumanResources.uspGetEmployees
@FirstName
=
N'Pilar',
@LastName
=
N'Ackerman';
GO
--
Or,
if
this
procere
is
the
first
statement
within
a
batch:
HumanResources.uspGetEmployees
N'Ackerman',
N'Pilar';
C.
使用帶有通配符參數的簡單過程
以下存儲過程只從視圖中返回指定的一些雇員(提供名和姓)及其職務和部門名稱。此存儲過程模式與所傳遞的參數相匹配;或者,如果未提供參數,則使用預設的默認值(以字母
D
打頭的姓)。
復制
USE
AdventureWorks;
GO
IF
OBJECT_ID
(
'HumanResources.uspGetEmployees2',
'P'
)
IS
NOT
NULL
DROP
PROCEDURE
HumanResources.uspGetEmployees2;
GO
CREATE
PROCEDURE
HumanResources.uspGetEmployees2
@LastName
nvarchar(50)
=
N'D%',
@FirstName
nvarchar(50)
=
N'%'
AS
SET
NOCOUNT
ON;
SELECT
FirstName,
LastName,
JobTitle,
Department
FROM
HumanResources.vEmployeeDepartment
WHERE
FirstName
LIKE
@FirstName
AND
LastName
LIKE
@LastName;
GO
uspGetEmployees2
存儲過程可使用多種組合執行。下面只顯示了幾個組合:
復制
EXECUTE
HumanResources.uspGetEmployees2;
--
Or
EXECUTE
HumanResources.uspGetEmployees2
N'Wi%';
--
Or
EXECUTE
HumanResources.uspGetEmployees2
@FirstName
=
N'%';
--
Or
EXECUTE
HumanResources.uspGetEmployees2
N'[CK]ars[OE]n';
--
Or
EXECUTE
HumanResources.uspGetEmployees2
N'Hesse',
N'Stefen';
--
Or
EXECUTE
HumanResources.uspGetEmployees2
N'H%',
N'S%';
D.
使用
OUTPUT
參數
以下示例將創建
uspGetList
存儲過程。此過程將返回價格不超過指定數值的產品的列表。此示例顯示如何使用多個
SELECT
語句和多個
OUTPUT
參數。OUTPUT
參數允許外部過程、批處理或多條
Transact-SQL
語句在過程執行期間訪問設置的某個值。
復制
USE
AdventureWorks;
GO
IF
OBJECT_ID
(
'Proction.uspGetList',
'P'
)
IS
NOT
NULL
DROP
PROCEDURE
Proction.uspGetList;
GO
CREATE
PROCEDURE
Proction.uspGetList
@Proct
varchar(40)
,
@MaxPrice
money
,
@ComparePrice
money
OUTPUT
,
@ListPrice
money
OUT
AS
SET
NOCOUNT
ON;
SELECT
p.[Name]
AS
Proct,
p.ListPrice
AS
'List
Price'
FROM
Proction.Proct
AS
p
JOIN
Proction.ProctSubcategory
AS
s
ON
p.ProctSubcategoryID
=
s.ProctSubcategoryID
WHERE
s.[Name]
LIKE
@Proct
AND
p.ListPrice