辅导:SQLServer(多语句表值函数代码)
来源:优易学  2011-10-22 9:02:57   【优易学:中国教育考试门户网】   资料下载   IT书店
 代码如下:
  set ANSI_NULLS ON
  set QUOTED_IDENTIFIER ON
  go
  CREATE FUNCTION [dbo].[ufnGetContactInformation](@ContactID int)
  RETURNS @retContactInformation TABLE
  (
  -- Columns returned by the function
  [ContactID] int PRIMARY KEY NOT NULL,
  [FirstName] [nvarchar](50) NULL,
  [LastName] [nvarchar](50) NULL,
  [JobTitle] [nvarchar](50) NULL,
  [ContactType] [nvarchar](50) NULL
  )
  AS
  -- Returns the first name, last name, job title and contact type for the specified contact.
  BEGIN
  DECLARE
  @FirstName [nvarchar](50),
  @LastName [nvarchar](50),
  @JobTitle [nvarchar](50),
  @ContactType [nvarchar](50);
  -- Get common contact information
  SELECT
  @ContactID = ContactID,
  @FirstName = FirstName,
  @LastName = LastName
  FROM [Person].[Contact]
  WHERE [ContactID] = @ContactID;
  SET @JobTitle =
  CASE
  -- Check for employee
  WHEN EXISTS(SELECT * FROM [HumanResources].[Employee] e
  WHERE e.[ContactID] = @ContactID)
  THEN (SELECT [Title]
  FROM [HumanResources].[Employee]
  WHERE [ContactID] = @ContactID)
  -- Check for vendor
  WHEN EXISTS(SELECT * FROM [Purchasing].[VendorContact] vc
  INNER JOIN [Person].[ContactType] ct
  ON vc.[ContactTypeID] = ct.[ContactTypeID]
  WHERE vc.[ContactID] = @ContactID)
  THEN (SELECT ct.[Name]
  FROM [Purchasing].[VendorContact] vc
  INNER JOIN [Person].[ContactType] ct
  ON vc.[ContactTypeID] = ct.[ContactTypeID]
  WHERE vc.[ContactID] = @ContactID)
  -- Check for store
  WHEN EXISTS(SELECT * FROM [Sales].[StoreContact] sc
  INNER JOIN [Person].[ContactType] ct
  ON sc.[ContactTypeID] = ct.[ContactTypeID]
  WHERE sc.[ContactID] = @ContactID)
  THEN (SELECT ct.[Name]
  FROM [Sales].[StoreContact] sc
  INNER JOIN [Person].[ContactType] ct
  ON sc.[ContactTypeID] = ct.[ContactTypeID]
  WHERE [ContactID] = @ContactID)
  ELSE NULL
  END;
  SET @ContactType =
  CASE
  -- Check for employee
  WHEN EXISTS(SELECT * FROM [HumanResources].[Employee] e
  WHERE e.[ContactID] = @ContactID)
  THEN 'Employee'
  -- Check for vendor
  WHEN EXISTS(SELECT * FROM [Purchasing].[VendorContact] vc
  INNER JOIN [Person].[ContactType] ct
  ON vc.[ContactTypeID] = ct.[ContactTypeID]
  WHERE vc.[ContactID] = @ContactID)
  THEN 'Vendor Contact'
  -- Check for store
  WHEN EXISTS(SELECT * FROM [Sales].[StoreContact] sc
  INNER JOIN [Person].[ContactType] ct
  ON sc.[ContactTypeID] = ct.[ContactTypeID]
  WHERE sc.[ContactID] = @ContactID)
  THEN 'Store Contact'
  -- Check for individual consumer
  WHEN EXISTS(SELECT * FROM [Sales].[Individual] i
  WHERE i.[ContactID] = @ContactID)
  THEN 'Consumer'
  END;
  -- Return the information to the caller
  IF @ContactID IS NOT NULL
  BEGIN
  INSERT @retContactInformation
  SELECT @ContactID, @FirstName, @LastName, @JobTitle, @ContactType;
  END;
  RETURN;
  END;

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训