【问题标题】:Dont want Select variable displaying values不想选择显示值的变量
【发布时间】:2013-06-21 19:15:33
【问题描述】:

这可能很简单,但我一直无法弄清楚。 我有一段代码(类似于下面的代码),我通过选择将一堆值分配给一堆变量,它完成了这项工作,但是当我运行它时,我得到了导致我的 SSMS 崩溃的结果集在那里避免这种情况的方法....

DECLARE @Name VARCHAR(100)
DECLARE @LastName VARCHAR(100)
DECLARE @Address VARCHAR(100)

SELECT TOP 1 
@Name = Name
@LastName = LastName
@Address = Address
From Person.Address
Where Name = 'Name'
Order By ID

我在循环中使用上面的代码,我正在处理大约 3-400K 行并将此变量传递给存储过程,每个前 1 个选择语句都会引发一个结果集,导致我的 SSMS 崩溃我真的不需要选择要显示的前 1 个值,知道如何摆脱这个吗?....

任何帮助将不胜感激。

---正如下面要求的代码,我已经散列了一些东西,但这就是它,我从 Query Analayzer 运行它,因为这只是 1 次过程,所以我们不需要创建 SP。

    DECLARE @retstat INT 
    DECLARE @Name VARCHAR(255)
    DECLARE @Lang TINYINT
    DECLARE @Address CHAR(10)
    DECLARE @ID INT 
    DECLARE @BranchSeqNo INT

    DECLARE @AddressCode VARCHAR(10)    
    DECLARE @Address1 VARCHAR(50) 

    DECLARE @City VARCHAR(30) 
    DECLARE @State VARCHAR(3)   
    DECLARE @PostalCode VARCHAR(15)     
    DECLARE @Country VARCHAR(30)    

    SET @ID = NULL

    UPDATE  RAWClaimTable Set Processed = 0 where Processed is null

    UPDATE  RAWClaimTable SET  ErrorCode = NULL ,ErrorMessage = NULL ,Processed = 0
    WHERE   ErrorMessage IS NOT NULL AND CLAIMID is null 

WHILE EXISTS ( SELECT   *
           FROM     RAWClaimTable
           WHERE    Processed = 0 ) 
BEGIN 

-----Initialize Default Variables 
    SET @Lang = 0 
    SET @Address = 'Import'
    SET @SaveMode = 0 
    SET @ID = Null


    SELECT TOP 1
            @LossDate = LossDate ,
            @ClaimDate = ClaimDate ,
            @OpenDate = OpenDate ,
            @Receivedate = ReceiVeDate ,
            @Name = Name ,
            @Address = Address ,
            @Address1 = Address1 ,
            @City = City ,
            @State = State ,
            @PostalCode = PostalCode ,
            @Country = Country
    FROM    RAWClaimTable
    WHERE   Processed = 0
    ORDER BY ClaimID 

    BEGIN TRY 

        EXEC @RetStat = Usp_ProcessRawData @Lang, @Address, @SaveMode, @ID OUT,
            @BranchSeqNo, @OriginalBranchSeqNo, @IncidentID,
            @AssignmentTypeCode, @PartnershipID, @AccountID,

    END TRY         

    BEGIN CATCH

        SELECT  @RetStat = @@Error
        if @@Trancount > 0 rollback tran
        IF @RetStat != 0
            BEGIN
                update RAWClaimTable set Errormessage = ERROR_MESSAGE() where ClaiMKey = @Name
            END 
    END CATCH

    IF @ID IS NOT NULL 
        BEGIN
            UPDATE  RAWClaimTable
            SET     ClaimID = @ID ,
                    Processed = 1
            WHERE   ClaiMKey = @Name
        END      
    ELSE 
        BEGIN
            UPDATE  RAWClaimTable
            SET     Processed = 1
            WHERE   ClaiMKey = @Name
        END      

END 

【问题讨论】:

  • 你确定你找对地方了吗?通过 SELECT 为变量赋值不会返回结果集。
  • 您是否在您的 sp 顶部添加了SET NOCOUNT ON;
  • 这可能会有所帮助:stackoverflow.com/questions/866484/…
  • @user2284363 那我最好发布你的sp代码,以及你执行它的方式
  • 您确定 SP Usp_ProcessRawData 没有选择任何数据?

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

使用 CURSOR 循环遍历你的行!

SET @Lang = 0 
SET @Address = 'Import'
SET @SaveMode = 0 
SET @ID = Null

DECLARE my_cursor CURSOR FOR 
    SELECT LossDate, ClaimDate, OpenDate, ReceiVeDate, Name, Address, 
       Address1, City, State, PostalCode, Country
    FROM RAWClaimTable
    WHERE Processed = 0
OPEN my_cursor

FETCH NEXT FROM my_cursor
INTO @LossDate, @ClaimDate, @OpenDate, @Receivedate, @Name, @Address,
     @Address1, @City, @State, @PostalCode, @Country

WHILE @@FETCH_STATUS = 0
BEGIN
   BEGIN TRY 
     EXEC @RetStat = Usp_ProcessRawData @Lang, @Address, @SaveMode, @ID OUT,
          @BranchSeqNo, @OriginalBranchSeqNo, @IncidentID,
          @AssignmentTypeCode, @PartnershipID, @AccountID,
   END TRY         

   BEGIN CATCH        
     SELECT  @RetStat = @@Error
       if @@Trancount > 0 rollback tran
       IF @RetStat != 0
           BEGIN
             update RAWClaimTable set Errormessage = ERROR_MESSAGE() 
             where ClaiMKey = @Name
           END 
   END CATCH

   IF @ID IS NOT NULL 
       BEGIN
           UPDATE  RAWClaimTable
           SET     ClaimID = @ID ,
                   Processed = 1
           WHERE   ClaiMKey = @Name
       END      
   ELSE 
       BEGIN
           UPDATE  RAWClaimTable
           SET     Processed = 1
           WHERE   ClaiMKey = @Name
       END      

   FETCH NEXT FROM my_cursor
   INTO @LossDate, @ClaimDate, @OpenDate, @Receivedate, @Name, @Address,
        @Address1, @City, @State, @PostalCode, @Country
END 

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2019-12-11
    • 2021-09-30
    相关资源
    最近更新 更多