2011-06-24 116 views
0

我想創建一個比較兩個查詢結果的存儲過程。如果可以在第一個表格中找到第二個表格的結果,則打印「是」,否則,打印「否」。TSQL - 比較表

表1:

SELECT  dbo.Roles.RoleName, dbo.UserRoles.RoleID 
FROM   dbo.Roles LEFT OUTER JOIN 
dbo.UserRoles ON dbo.Roles.RoleID = dbo.UserRoles.RoleID 
WHERE  (dbo.Roles.PortalID = 0) AND (dbo.UserRoles.UserID = 2) 

表2:

Declare @RowData as nvarchar(2000) 
Set @RowData = (SELECT EditPermissions FROM vw_XMP_DMS_Documents where DocumentID = 2) 
Select Data 
from dbo.split(@RowData, ',') 

例如。

表1:

John 
Jack 
James 

表2:

John 
Sally 
Jane 

打印 'YES'

這可能嗎?

+1

確實是意味着「不同的」或「相同」之後?我問,因爲集合「John Sally Jane」不包含在集合「John Jack James」中。那麼爲什麼是「是」? – gbn

+0

是意味着匹配。這將是肯定的,因爲約翰是在1和2都設置。 – Rya

+0

匹配什麼?所有行或每行? – gbn

回答

1

我正在使用臨時表,因爲我不知道您的表格具有哪種格式。

SELECT  dbo.Roles.RoleName, dbo.UserRoles.RoleID 
INTO #t1 
FROM   dbo.Roles LEFT OUTER JOIN 
dbo.UserRoles ON dbo.Roles.RoleID = dbo.UserRoles.RoleID 
WHERE  (dbo.Roles.PortalID = 0) AND (dbo.UserRoles.UserID = 2) 


Declare @RowData as nvarchar(2000) 
Set @RowData = (SELECT EditPermissions FROM vw_XMP_DMS_Documents where DocumentID = 2) 
Select Data 
INTO #t2 
from dbo.split(@RowData, ',') 


select case when exists (select 1 from #t1 where RoleName = t.Data) then 'yes' else 'no' end answer, Data 
into #tmp 
from #t2 t 

select * from #tmp 

我不是100%確定這是你想要的。所以我猜測。

加入這樣的認識問題

if exists(select 1 from #t2 t2 join #t1 t1 on t1.RoleName = t2.data) 
print 'permsGranted' 
ELSE print 'permsNotGranted' 
+0

嗯......這個輸出結果是每列是或不是每列。將「yes」或「no」分配給變量,它看起來有點像@answer,可以是'yes'或'no'。這可能嗎? – Rya

+0

您可以將答案重定向到表格或表格變量。表是TSQLs答案陣列。 選擇「是」的回答到#tmp –

+0

/*這是什麼意思?它似乎沒有工作*/ 選擇的答案到時的情況下存在( \t \t「是」 \t \t \t \t select 1 \t \t \t \t \t \t從#T1 \t \t \t \t \t \t其中ROLENAME =噸。數據) \t \t \t \t \t \t \t然後 '是' \t \t \t \t \t \t \t否則 '不' \t \t \t \t \t \t \t最終的答案,數據 從#T2牛逼 – Rya