Предполагая, что вы используете последнюю версию SQL Server, и вы должны использовать значения с разделителями, используйте STRING_SPLIT
и STRING_AGG
:
DECLARE @table_source nvarchar(255) = N'ID,PERSONID,ALTROCAMPO,ANCORA,GENDER,LASTNAME,PRIMARYNAME';
DECLARE @table_target nvarchar(255) = N'ID,PERSONID,GENDER,LASTNAME,DATES,PRIMARYNAME';
WITH TS AS(
SELECT SS.[value]
FROM STRING_SPLIT(@table_source,',') SS),
TT AS(
SELECT SS.[value]
FROM STRING_SPLIT(@table_target,',') SS)
SELECT STRING_AGG(TS.[value],',') AS Result
FROM TS
JOIN TT ON TS.[value] = TT.[value];
Если вы не пользуетесь последней версией, вам необходимо заменить их разделителем строк (например, delimitedsplitN4K_LEAD
) и использовать метод FOR XML PATH
& STUFF
соответственно для каждой функции, которую вы надеваетенет доступа к.
Как я уже сказал, на самом деле вы должны использовать параметр табличного типа, и тогда это тривиально. при условии, что это имена столбцов, вы можете сделать:
--Create the type
CREATE TYPE dbo.Object_List AS TABLE (ObjectName sysname);
GO
--Declare variables
DECLARE @table_source dbo.Object_List;
INSERT INTO @table_source (ObjectName)
VALUES (N'ID'),(N'PERSONID'),(N'ALTROCAMPO'),(N'ANCORA'),(N'GENDER'),(N'LASTNAME'),(N'PRIMARYNAME')
DECLARE @table_target dbo.Object_List;
INSERT INTO @table_target (ObjectName)
VALUES (N'ID'),(N'PERSONID'),(N'ALTROCAMPO'),(N'ANCORA'),(N'GENDER'),(N'LASTNAME'),(N'PRIMARYNAME')
--Solution
SELECT ObjectName
FROM @table_source TS
WHERE EXISTS (SELECT 1
FROM @table_target TT
WHERE TS.ObjectName = TT.ObjectName);