下面是我写的一个简单的存储过程。但是不知道怎么会出错
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[work_calculate]  
@work int,
--@workk int,
@id varchar(100) output
as
SELECT @id= WO,JOBNO,CHILDJO,LOC,PRODLOC,CODE,PLOT,WT,MN,DN,BDESC,DDATE,QTY,MFQTY,STOCK,POTQTY,ANTQTY,VRTQTY,PDTQTY,PCTQTY,MRTQTY,PRTQTY,(QTY-(ISNULL(MRTQTY,0)-ISNULL(PRTQTY,0))) L_LOCQTY,((ISNULL(ANTQTY,0)-ISNULL(VRTQTY,0))+ISNULL(PCTQTY,0)-QTY) L_JOBQTY,(STOCK-(QTY-(ISNULL(MRTQTY,0)-ISNULL(PRTQTY,0)))) L_STKQTY FROM HC_RESVT WHERE WO=@work OR JOBNO=@work
  
这里表HC_RESVT是一个视图。
出错报告是:A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.
实在是搞不懂了。希望大家帮帮忙

解决方案 »

  1.   

    假设wo是INT型.
    ALTER PROCEDURE [dbo].[work_calculate]   
    @work int,
    --@workk int,
    @id varchar(100) output
    as
    begin
    declare @id as int
    SELECT @id= WO,JOBNO,CHILDJO,LOC,PRODLOC,CODE,PLOT,WT,MN,DN,BDESC,DDATE,QTY,MFQTY,STOCK,POTQTY,ANTQTY,VRTQTY,PDTQTY,PCTQTY,MRTQTY,PRTQTY,(QTY-(ISNULL(MRTQTY,0)-ISNULL(PRTQTY,0))) L_LOCQTY,((ISNULL(ANTQTY,0)-ISNULL(VRTQTY,0))+ISNULL(PCTQTY,0)-QTY) L_JOBQTY,(STOCK-(QTY-(ISNULL(MRTQTY,0)-ISNULL(PRTQTY,0)))) L_STKQTY FROM HC_RESVT WHERE WO=@work OR JOBNO=@work 
    end
      

  2.   


    of courseSELECT @id= WO FROM HC_RESVT WHERE WO=@work OR JOBNO=@work
      

  3.   

    向变量赋值的 SELECT 语句不能与数据检索操作结合使用。
      

  4.   

    没错一个字段他能执行多个字段他就出错了
    我实在是不明白了 我把视图的SQL贴出来
      

  5.   

    SELECT     (CASE WHEN MASTERJOB = '' THEN JOBNO ELSE MASTERJOB END) AS WO, JOBNO, CHILDJOB, LOC, PRODLOC, CODE, PLOT,
                              (SELECT     TOP (1) WT
                                FROM          dbo.PROUDF
                                WHERE      (CODE = dbo.RESVT.CODE)) AS WT,
                              (SELECT     TOP (1) MN
                                FROM          dbo.PROUDF AS PROUDF_1
                                WHERE      (CODE = dbo.RESVT.CODE)) AS MN,
                              (SELECT     TOP (1) DN
                                FROM          dbo.PROUDF AS PROUDF_1
                                WHERE      (CODE = dbo.RESVT.CODE)) AS DN, BDESC, CONVERT(CHAR(10), DDATE, 120) AS DDATE, QTY,
                              (SELECT     TOP (1) QTY
                                FROM          dbo.JOBT
                                WHERE      (JOBNO = dbo.RESVT.CHILDJOB) AND (CODE = dbo.RESVT.CODE) AND (PLOT = dbo.RESVT.PLOT)) AS MFQTY,
                              (SELECT     SUM(QTY) AS Expr1
                                FROM          dbo.V_LOCQTY
                                WHERE      (CODE = dbo.RESVT.CODE) AND (LOC BETWEEN 'S01' AND 'S15') AND (CO = 'HC')) AS STOCK,
                              (SELECT     SUM(QTY) AS Expr1
                                FROM          dbo.HC_POT
                                WHERE      (WO = (CASE WHEN RESVT.MASTERJOB = '' THEN RESVT.JOBNO ELSE RESVT.MASTERJOB END)) AND (CODE = dbo.RESVT.CODE)) 
                          AS POTQTY,
                              (SELECT     SUM(QTY) AS Expr1
                                FROM          dbo.HC_ANT
                                WHERE      (WO = (CASE WHEN RESVT.MASTERJOB = '' THEN RESVT.JOBNO ELSE RESVT.MASTERJOB END)) AND (CODE = dbo.RESVT.CODE)) 
                          AS ANTQTY,
                              (SELECT     SUM(QTY) AS Expr1
                                FROM          dbo.HC_VRT
                                WHERE      (WO = (CASE WHEN RESVT.MASTERJOB = '' THEN RESVT.JOBNO ELSE RESVT.MASTERJOB END)) AND (CODE = dbo.RESVT.CODE)) 
                          AS VRTQTY,
                              (SELECT     SUM(QTY) AS Expr1
                                FROM          dbo.PDT
                                WHERE      ((CASE WHEN PDT.MASTERJOB = '' THEN PDT.JOBNO ELSE PDT.MASTERJOB END) 
                                                       = (CASE WHEN RESVT.MASTERJOB = '' THEN RESVT.JOBNO ELSE RESVT.MASTERJOB END)) AND (CODE = dbo.RESVT.CODE)) 
                          AS PDTQTY,
                              (SELECT     SUM(QTY) AS Expr1
                                FROM          dbo.PCT
                                WHERE      ((CASE WHEN PCT.MASTERJOB = '' THEN PCT.JOBNO ELSE PCT.MASTERJOB END) 
                                                       = (CASE WHEN RESVT.MASTERJOB = '' THEN RESVT.JOBNO ELSE RESVT.MASTERJOB END)) AND (CODE = dbo.RESVT.CODE)) 
                          AS PCTQTY,
                              (SELECT     SUM(QTY) AS Expr1
                                FROM          dbo.MRT
                                WHERE      ((CASE WHEN MRT.MASTERJOB = '' THEN MRT.JOBNO ELSE MRT.MASTERJOB END) 
                                                       = (CASE WHEN RESVT.MASTERJOB = '' THEN RESVT.JOBNO ELSE RESVT.MASTERJOB END)) AND (CODE = dbo.RESVT.CODE)) 
                          AS MRTQTY,
                              (SELECT     SUM(QTY) AS Expr1
                                FROM          dbo.PRT
                                WHERE      (JOBNO = dbo.RESVT.JOBNO) AND (CODE = dbo.RESVT.CODE)) AS PRTQTY
    FROM         dbo.RESVT
      

  6.   

    SELECT @id= WO FROM HC_RESVT WHERE WO=@work OR JOBNO=@work
    这样是对的SELECT JOBNO,CHILDJO,LOC,PRODLOC,CODE,PLOT,WT,MN,DN,BDESC,DDATE,QTY,MFQTY,STOCK,POTQTY,ANTQTY,VRTQTY,PDTQTY,PCTQTY,MRTQTY,PRTQTY,(QTY-(ISNULL(MRTQTY,0)-ISNULL(PRTQTY,0))) L_LOCQTY,((ISNULL(ANTQTY,0)-ISNULL(VRTQTY,0))+ISNULL(PCTQTY,0)-QTY) L_JOBQTY,(STOCK-(QTY-(ISNULL(MRTQTY,0)-ISNULL(PRTQTY,0)))) L_STKQTY FROM HC_RESVT WHERE WO=@work OR JOBNO=@work
    这样也是对的