验证单个SQL事务中不同表中是否存在两列

时间:2012-05-31 13:51:44

标签: asp.net vb.net tsql stored-procedures multiple-tables

我正在尝试验证单个事务中两个不同表中是否存在数据。单一交易的原因是数据库每天会被触及大约1-3百万次,因此添加超过1个额外的交易会使这个数字增加到900万,而我可怜的小服务器需要休息一下:)

所以我需要检查表X和表Y中是否存在ID并将结果返回到我的VB.net脚本,这样我才能处理结果理想情况下这样的事情会起作用

if exists (select id from X where id = @id)
print 'True,' else print 'False,'
if exists (select id from Y where id = @id)
print 'True' else print 'False'

这给了我“真,真”如果存在于两者或“真,​​假”等等......但是这只显示在SQL打印中而不实际将其作为对象/字符串或数组值返回我可以使用

我愿意接受这种性质的任何解决方案,它可以从单个事务中获得两个结果以及如何在vb中处理该响应。感谢

3 个答案:

答案 0 :(得分:2)

SELECT
    Case When EXISTS(SELECT 1 FROM X WHERE id = @id) Then 1 Else 0 End AS IsInX,
    Case When EXISTS(SELECT 1 FROM Y WHERE id = @id) Then 1 Else 0 End AS IsInY

答案 1 :(得分:1)

select (select COUNT(*) from X where id = @id) AS x_exists,
       (select COUNT(*) from Y where id = @id) AS y_exists

这会返回一个包含两个字段的数据行,每个字段包含01(或更多,如果id不唯一)。

答案 2 :(得分:0)

CREATE PROCEDURE CheckIDOnTables(@ID int)
AS
BEGIN
DECLARE @X AS NVARCHAR(10)
DECLARE @Y AS NVARCHAR(10)
Set @X = 'False'
Set @Y = 'False'
if exists (select id from TableX where id = @ID) 
    Set @X = 'True'
if exists (select id from TableY where id = @ID) 
    Set @Y = 'True'
SELECT @X AS XExists, @Y AS YEsists
END

它会为您提供所需的结果。