标签:insert returns substring 函数 end ble table union exists
CREATE TABLE #table1(id INt,title VARCHAR(50))
INSERT INTO #table1 (id,
title)
SELECT 1,‘afafaa‘
UNION ALL
SELECT 2,‘dsaf‘
UNION ALL
SELECT 3,‘dsssaf‘
UNION ALL
SELECT 4,‘qqwe‘
UNION ALL
SELECT 51,‘ewrd‘
CREATE TABLE #table2(id INT,title VARCHAR(50),t1ids VARCHAR(50))
INSERT INTO #table2
( id, title, t1ids )
VALUES ( 1, -- id - int
‘111‘, -- title - varchar(50)
‘1,4,5‘ -- t1ids - int
)
SELECT t1.*,(CASE ISNULL(t.VALUE,0) WHEN 0 THEN 0 ELSE 1 end)AS iflag FROM #table1 t1 LEFT JOIN (
SELECT a.*,b.Value
FROM #table2 a
CROSS APPLY(SELECT Value FROM dbo.fn_split(a.t1ids,‘,‘,1)) b)AS t
ON t1.id = t.value
--函数定义
CREATE FUNCTION [dbo].[fn_split] ( @String NVARCHAR(MAX) ,
@Str NVARCHAR(20),
@distinct BIT )
RETURNS @table TABLE ( Value NVARCHAR(MAX),orders int)
AS
BEGIN
DECLARE @i INT ,
@j INT ,
@l INT ,
@v NVARCHAR(MAX),
@orders int
SET @i = 0
SET @j = 0
SET @l = LEN(@String)
set @orders=1
WHILE ( @j < @l )
BEGIN
SET @j = CHARINDEX(@Str, @String, @i + 1)
IF @j = 0
SET @j = @l + 1
SET @v = SUBSTRING(@String, @i + 1, @j - @i - 1 )
IF @v <> ‘‘ AND (@distinct = 0 OR NOT EXISTS (SELECT 1 FROM @table WHERE Value = @v))
INSERT INTO @table
VALUES ( LTRIM(RTRIM(@v)),@orders)
SET @i = @j + LEN(@Str) - 1
set @orders=@orders+1
END
RETURN
END
标签:insert returns substring 函数 end ble table union exists
原文地址:http://www.cnblogs.com/OwenZeng/p/7604250.html