用户定义的表格类型中的“IN”关键字

时间:2017-03-14 06:12:15

标签: sql-server-2012 user-defined-types

我在我的一个存储过程中使用用户定义的表类型,发送了大量的zipcodes。以下是我的存储过程

CREATE Procedure [PrdCtlg].[sp_GetZipByCodes](@dtZip PrdCtlg.ZipType ReadOnly)
as 
begin
Select z.pkZipId, z.ZipCode, z.fkCityId from prdctlg.zip z where zipcode in 
 (select zip from @dtZip )


end

但它什么也没有回报。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我认为这段代码可能会对您有所帮助,我们不应该创建前缀为“Sp_”的存储过程名称, 因为所有系统定义的存储过程都按照sql规范开始 使用像“usp_ProcName”

IF EXISTS 
(SELECT 1

  FROM INFORMATION_SCHEMA.ROUTINES
  WHERE SPECIFIC_NAME = 'sp_GetZipByCodes'
  AND ROUTINE_TYPE = 'PROCEDURE'
)
  DROP PROCEDURE sp_GetZipByCodes

CREATE PROCEDURE [PrdCtlg].[sp_GetZipByCodes] (@dtZip PrdCtlg.ZipType READONLY)
AS
BEGIN
  IF EXISTS (SELECT 1 FROM @dtZip)
  BEGIN
            SELECT
                  z.pkZipId,
                  z.ZipCode,
                  z.fkCityId
            FROM prdctlg.zip z
            WHERE zipcode IN (SELECT zip FROM @dtZip)

  END
END
  --Sample value passed to Execute Procedure
  DECLARE @dtZip PrdCtlg.ZipType

  INSERT INTO @dtZip (ColumnName)
    VALUES (1)
  INSERT INTO @dtZip (ColumnNAme)
    VALUES (1)

  EXEC [dbo].[usp_GetZipByCodes] @dtZip = @dtZip