我有一个函数可以得到两个ID列表,我想要返回差异计数。如果两个列表相等,则为0,否则为计数。T-SQL获得两个表之间差异的计数
这我会叫:
SELECT [dbo].[Redline_compareBaseProjSuccessors]
('2498,2502,2510,2521,2841',
'2498,2502,2510,2521,2532,2820,2841') as isDifferent
我的作用是:
ALTER FUNCTION [dbo].[Redline_compareBaseProjSuccessors] (@projSuccessors varchar,@baseSuccessors varchar)
RETURNS int
AS
BEGIN
DECLARE @proj_assignment_ids TABLE (obj_id int)
DECLARE @base_assignment_ids TABLE (obj_id int)
DECLARE @is_different int
INSERT INTO @base_assignment_ids
SELECT base_assignment_id as obj_id
FROM base_assignment
WHERE base_assignment_id IN (@baseSuccessors)
INSERT INTO @proj_assignment_ids
SELECT base_assignment_id AS obj_id
FROM proj_assignment
WHERE proj_assignment_id IN (@projSuccessors)
SELECT @is_different = Count(obj_id)
FROM @base_assignment_ids
WHERE obj_id NOT IN (SELECT obj_id FROM @proj_assignment_ids)
RETURN @is_different
END
的@base_assignment_ids
价值为:2498,2502,2510,2521,2841,2532,2820
和@proj_assignment_ids
= 2498,2502,2510,2521,2841
的价值,所以我期望作为回报价值,但我得到
出了什么问题?
如果要创建的2个逗号分隔字符串可能是更为有效的,以完全避免他们和解决这个问题以不同的方式 – 2014-09-26 09:07:29
我不知道,但我认为你的函数参数没有很好地定义你已经设置了varchar,我认为它们应该有一个长度,即varchar(100) – 2014-09-26 09:08:09