【问题标题】:Verify existence of two columns in different tables in a single SQL transaction在单个 SQL 事务中验证不同表中是否存在两列
【发布时间】:2012-05-31 13:51:44
【问题描述】:

我正在尝试验证数据是否存在于单个事务中的两个不同表中。单个事务的原因是数据库每天被访问大约 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 中处理该响应。谢谢

【问题讨论】:

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


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案2】:
      select (select COUNT(*) from X where id = @id) AS x_exists,
             (select COUNT(*) from Y where id = @id) AS y_exists
      

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

      【讨论】:

        【解决方案3】:
        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
        

        它会给你想要的结果。

        【讨论】:

          猜你喜欢
          • 2016-01-22
          • 1970-01-01
          • 2014-12-11
          • 2015-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-19
          • 1970-01-01
          相关资源
          最近更新 更多