Sql 如何摆脱光标并使用带选择的更新
我相信这段代码中使用的游标是导致一些主要性能问题的原因,但是我对TSQL是新手 以下脚本在SQLServer2008上运行。我正试图重做它,所以我使用了JOIN语句,但是我没有成功地这样做Sql 如何摆脱光标并使用带选择的更新,sql,sql-server,tsql,Sql,Sql Server,Tsql,我相信这段代码中使用的游标是导致一些主要性能问题的原因,但是我对TSQL是新手 以下脚本在SQLServer2008上运行。我正试图重做它,所以我使用了JOIN语句,但是我没有成功地这样做 DECLARE AIRAMSDET CURSOR FOR SELECT BILL, RECIEPT, NAME FROM Client_Table WHERE IsProcessed = 1 AND TYPE IN ('Sub','First_Time','Old') AND LEN(BILL) >
DECLARE AIRAMSDET CURSOR FOR
SELECT BILL, RECIEPT, NAME
FROM Client_Table
WHERE IsProcessed = 1
AND TYPE IN ('Sub','First_Time','Old') AND LEN(BILL) > 1
OPEN AIRAMSDET
FETCH AIRAMSDET into @VARBILL, @VARRECIEPT, @VARNAME
WHILE @@Fetch_Status = 0
BEGIN
UPDATE archieve
SET entry = left(@VARBILL + '- '+ @VARNAME)
WHERE archiveID = @VARBILL
END
它应该像下面这样
UPDATE ARCHIEVE
SET ENTRY = CT.BILL + '-' + CT.NAME
FROM CLIENT_TABLE CT
WHERE
ARCHIEVE.ARCHIVEID = CT.BILL
AND CT.ISPROCESSED = 1
AND CT.TYPE IN ('Sub','First_Time','Old') AND LEN(BILL) > 1
我没有包括LEFT(),因为它在查询中的用法不太清楚。在传递@VARNAME时,Left将整数\表达式作为其第二个参数,该参数很可能是VARCHAR。请添加您认为合适的内容。由于循环中没有
获取
,因此它将长时间处理同一行。