Hier ist eine dynamische SQL-Methode zu tun wahrsten Sinne des Wortes, was Sie fragen für Match:
DECLARE @cols TABLE (id int identity(1,1), colname varchar(25))
INSERT INTO @cols (colname) select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'User' AND COLUMN_NAME <> 'id'
declare @sql nvarchar(max)
select @sql = 'SELECT a.id, '
declare @maxval int
select @maxval = max(id) from @cols
declare @c int = 1
declare @curcol varchar(25)
while @c <= @maxval
begin
if @c > 1
select @sql += ', '
select @curcol = colname from @cols where id = @c
select @sql += 'a.' + @curcol + ' as ''Table_1_' + @curcol + ''', b.' + @curcol + ' as ''Table_2_' + @curcol + ''',
CASE
WHEN a.' + @curcol + ' IS NULL AND b.' + @curcol + ' IS NULL THEN ''True''
WHEN a.' + @curcol + ' = b.' + @curcol + ' THEN ''True''
ELSE ''False''
END AS ''Is Equal?'''
set @c = @c + 1
end
select @sql += 'FROM [User] a
INNER JOIN User_Group b ON a.id = b.id'
exec sp_executesql @sql
Mit dem folgenden Testdaten:
create table [User] (id int, username varchar(10), fname varchar(25), lname varchar(25))
create table [User_Group] (id int, username varchar(10), fname varchar(25), lname varchar(25))
insert into [User] values (1, 'user1', 'fname1', 'lname1')
insert into [User_Group] values (1, 'user1', 'fname1', 'lname1')
insert into [User] values (2, 'user2', 'fname2', 'lname2')
insert into [User_Group] values (2, 'user2', 'fnameasdf', 'lnamesdfg')
Es erzeugt diese Ausgabe:
id Table_1_username Table_2_username Is Equal? Table_1_fname Table_2_fname Is Equal? Table_1_lname Table_2_lname Is Equal?
1 user1 user1 True fname1 fname1 True lname1 lname1 True
2 user2 user2 True fname2 fnameasdf False lname2 lnamesdfg False
Hier
ist die Abfrage erzeugt sie:
SELECT a.id, a.username as 'Table_1_username', b.username as 'Table_2_username',
CASE
WHEN a.username IS NULL AND b.username IS NULL THEN 'True'
WHEN a.username = b.username THEN 'True'
ELSE 'False'
END AS 'Is Equal?', a.fname as 'Table_1_fname', b.fname as 'Table_2_fname',
CASE
WHEN a.fname IS NULL AND b.fname IS NULL THEN 'True'
WHEN a.fname = b.fname THEN 'True'
ELSE 'False'
END AS 'Is Equal?', a.lname as 'Table_1_lname', b.lname as 'Table_2_lname',
CASE
WHEN a.lname IS NULL AND b.lname IS NULL THEN 'True'
WHEN a.lname = b.lname THEN 'True'
ELSE 'False'
END AS 'Is Equal?'FROM [User] a
INNER JOIN User_Group b ON a.id = b.id
, dass "t Arbeit zu gewonnen, wenn es einen Fall empfindlich, ich würde verwenden' UPPER() ' – Sami
@Sami Ich bin mir bewusst, danke! –
haben die beiden Tabellen die gleiche Struktur? – SEarle1986