У меня проблема с "MAKH", SQL постоянно сообщает, что столбец неверен - PullRequest
0 голосов
/ 05 июля 2019

Моя процедура не работает, это означает, что столбец MAKH недействителен, я проверил, но не смог найти причину

CREATE PROC SP8
AS
BEGIN
    SELECT 
        MAVT, MAKH, SUM(SOLUONG) AS SLXUAT 
    INTO 
        #TPA
    FROM 
        CT70
    WHERE 
        NXT = 2
    GROUP BY 
        MAVT, MAKH


    SELECT MAVT 
    INTO #TEMP
    FROM CT70

    DECLARE @SQLSTR NVARCHAR(MAX) = '';

    SELECT @SQLSTR = @SQLSTR + 'ALTER TABLE #TEMP ADD ' + MAKH + ' 
                                NUMERIC(20,4) DEFAULT 0 NOT NULL;'
    FROM DMKH

    EXEC(@SQLSTR)

    DECLARE @SQLSTR1 NVARCHAR(MAX) ='';

    SELECT @SQLSTR1 = @SQLSTR1 + 'UPDATE #TEMP SET ' + (MAKH) + ' = SLXUAT 
    FROM #TPA 
    WHERE #TEMP.MAVT = #TPA.MAVT 
      AND #TEMP.MAKH = '+CHAR(39)+RTRIM(MAKH)+CHAR(39)+';' FROM CT70

    SELECT * FROM #TEMP

    EXEC(@SQLSTR1)
END
GO

Как я могу найти причину этого?

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Попробуйте вместо
AND #TEMP.MAKH = '+CHAR(39)+RTRIM(MAKH)+CHAR(39)+';' FROM CT70
это:
AND #TEMP.' + MAKH + ' = ' + CHAR(39)+RTRIM(MAKH)+CHAR(39)+';' FROM CT70
сделать MAKH динамическим столбцом #TEMP.

0 голосов
/ 05 июля 2019

Ваш последний динамический запрос имеет условие объединения AND #TEMP.MAKH, а #TEMP не имеет столбца с именем MAKH.

. То, что вы добавляете в предыдущем динамическом SQL, - это столбцы с столбец ссылка , которая называется MAKH, но фактическое имя столбца - это содержимое столбца MAKH из таблицы DMKH.

Я не могудать решение, так как, к сожалению, я не знаю ваших намерений и данных из базовой таблицы.Просто убедитесь, что PRINT SQL перед его выполнением, будет довольно легко увидеть ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...