Sql 不希望选择显示值的变量
这可能很简单,但我一直很难弄清楚。 我有一段代码(类似于下面的代码),我通过select将一组值分配给一组变量,它完成了任务,但当我运行它时,我得到的结果集导致我的SSM崩溃。有没有办法避免这种情况Sql 不希望选择显示值的变量,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,这可能很简单,但我一直很难弄清楚。 我有一段代码(类似于下面的代码),我通过select将一组值分配给一组变量,它完成了任务,但当我运行它时,我得到的结果集导致我的SSM崩溃。有没有办法避免这种情况 DECLARE @Name VARCHAR(100) DECLARE @LastName VARCHAR(100) DECLARE @Address VARCHAR(100) SELECT TOP 1 @Name = Name @LastName = LastName @Address = Ad
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行,并将这些变量传递给存储过程,每个top 1 select语句都会抛出一个结果集,导致我的SSM崩溃。我真的不需要显示select top 1值,知道如何摆脱它吗
任何帮助都将不胜感激
---正如下面所要求的代码,我已经散列了一些东西,但这就是它,我正在运行它从查询Analayzer,因为这只是一个时间进程,所以我们不需要创建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
使用光标在您的行中循环
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
你确定你找对地方了吗?通过SELECT为变量赋值不会返回结果集。是否添加了
set NOCOUNT ON代码>在您的sp顶部?这可能会有所帮助:@user2284363那么我最好发布您的sp代码,以及您执行它的方式您确定sp Usp_ProcessRawData没有选择任何数据吗?