在SQL Server存储过程中循环用户定义的表类型

时间:2016-01-15 12:50:59

标签: sql sql-server loops stored-procedures

我有一个用户定义的表类型

// Shallow copy
var copy = jQuery.extend({}, json);

// Deep copy
var copy= jQuery.extend(true, {}, json);

我在存储过程中将该表作为输入参数(它包含字符串列表)

create TYPE [dbo].[AddressList] AS TABLE (
    [Address] [NVARCHAR](MAX) not null
);

我想迭代它

例如,我的数据库中有一个表create PROCEDURE [dbo].[SP_ScanAddress] @list AddressList READONLY AS BEGIN -- need to iterate it here END ,如果我的输入中的地址存在于数据库中,那么我想在一次调用中返回Address其他Status=1。所以它应该返回

Status=0
某种......

1 个答案:

答案 0 :(得分:2)

嗯,实际上你不需要任何循环。

您可以简单地从表变量连接到数据库表,如果没有匹配则返回0,否则返回1.

类似的东西(这里column_you_need表示你的表中要保存要比较的地址的列):

select 
    T.Address,
    case when T1.column_you_need is null then 0 else 1 end as Status 
from @list as T
    left outer join Address as T1 on T.Address = T1.column_you_need