0

1回のトランザクションでデータが2つの異なるテーブルに存在するかどうかを確認しようとしています。単一のトランザクションの理由は、データベースが1日に約1〜300万回ヒットするため、トランザクションを1つ以上追加すると、その数が最大900万に増加し、私の貧弱な小さなサーバーは休憩が必要です:)

したがって、IDがテーブルXとテーブルYに存在するかどうかを確認し、結果を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'

両方または「True、False」などに存在する場合は「True、True」になりますが、SQL印刷でのみ表示され、実際に使用できるオブジェクト/文字列または配列値として返されることはありません。

私は、単一のトランザクションから2つの結果を得ることができ、vbでその応答を処理する方法を提供できる、この種のあらゆる種類のソリューションを受け入れています。ありがとう

4

3 に答える 3

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
于 2012-05-31T14:00:39.847 に答える
1
select (select COUNT(*) from X where id = @id) AS x_exists,
       (select COUNT(*) from Y where id = @id) AS y_exists

これにより、2つのフィールドを持つ1つのデータ行が返されます。各フィールドには、0または(一意でない1場合はそれ以上)が含まれます。id

于 2012-05-31T13:56:37.657 に答える
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

それはあなたの望む結果をもたらします。

于 2012-05-31T14:07:27.750 に答える