0

誰かが助けてくれますか?私が間違っていることを知りません:

IF EXISTS ( SELECT  name
        FROM    sys.tables
        WHERE   name = N'MemberIdsToDelete' ) 
DROP TABLE [MemberIdsToDelete];
GO

SELECT  mm.memberid ,
        mm.aspnetuserid ,
        mm.email ,
        mm.RowNum AS RowNum
INTO    #MemberIdsToDelete
FROM    membership.members AS mm
        LEFT JOIN aspnet_membership AS asp ON mm.aspnetuserid = asp.userid
        LEFT JOIN trade.tradesmen AS tr ON tr.memberid = mm.memberid
WHERE   asp.isapproved = 0
        AND tr.ImportDPN IS NOT NULL
    AND tr.importDPN <> ''
ORDER BY mm.memberid

DECLARE @MaxRownum INT
SET @MaxRownum = ( SELECT   MAX(RowNum)
                   FROM     #MemberIdsToDelete
                 )

DECLARE @Iter INT
SET @Iter = ( SELECT    MIN(RowNum)
              FROM      #MemberIdsToDelete
            )

DECLARE @MemberId INT
DECLARE @TrademId INT
DECLARE @UId UNIQUEIDENTIFIER
DECLARE @Successful INT
DECLARE @OutputMessage VARCHAR(200)
DECLARE @Email VARCHAR(100)
DECLARE @Username VARCHAR(100)

SELECT  @MemberId = memberId ,
        @UId = AspNetUserId
FROM    MemberIdsToDelete
SELECT  @TrademId = TradesManId
FROM    trade.TradesMen
WHERE   memberId = @MemberId;

WHILE @Iter <= @MaxRownum 
  BEGIN
    SELECT  *
    FROM    #MemberIdsToDelete
    WHERE   RowNum = @Iter
  --more code here
    SET @Iter = @Iter + 1
  END

テーブル MemberIdsToDelete が存在するかどうかを確認したいだけです。存在する場合は削除し、選択ループからの結果セットを使用して MemberIdsToDelete を作成し、MemberIdsToDelete テーブルを介して操作を実行します。

RowNum が存在しないというエラーが表示されます

4

2 に答える 2

0

まず、テーブルが存在するかどうかを確認し、それに応じてドロップするには、次のようなものを使用する必要があります。

IF EXISTS (SELECT name 
           FROM sys.tables 
           WHERE name = N'MemberIdsToDelete') 
DROP TABLE [MemberIdsToDelete];
GO

エラーについては、参照しようとしたときにRowNum列が存在しません。SELECTステートメントに含めます

select mm.memberid, mm.aspnetuserid, mm.email, mm.RowNum AS RowNum    
into #MemberIdsToDelete     
from membership.members as mm      
    left join aspnet_membership as asp       
        on mm.aspnetuserid=asp.userid       
            left join trade.tradesmen as tr       
                on tr.memberid=mm.memberid       
where asp.isapproved = 0 and tr.ImportDPN IS NOT NULL 
    and tr.importDPN <> '' 
order by mm.memberid;
GO  

これがお役に立てば幸いです。

編集。あなたのコメントからの追加のエラーに基づいています。現在、存在しない一時テーブルにアクセスしようとしています。#MemberIdsToDelete一時テーブルから読み取る前に、まず一時テーブルにデータを入力する必要があります。無効な列エラーは同じ問題によるものです。RowNum存在しない一時テーブルから呼び出された列を読み取ろうとしています。

編集2。から「#」を削除し#MemberIdsToDeleteます。一時的なテーブルではなく、テーブルに挿入しています。または、上記に#を追加しselect intoます(上記のコードを参照)。これにより、必要に応じて一時テーブルになります。

于 2012-08-28T10:04:09.083 に答える
0

そのテーブルには RowNum 列がありません。

試す:

select mm.memberid, mm.aspnetuserid, mm.email, row_number() over (order by (select 1)) as RowNum ....

これで問題は解決するはずですが、削除するものをループするというこのアイデアは実際にはお勧めしません。

于 2012-08-28T09:58:27.113 に答える