использование результатов SELECT в качестве INSERT INTO VALUES показывает ошибку типа CLR - PullRequest
1 голос
/ 12 мая 2011

Я пытаюсь выполнить эту команду SQL в VS Query Builder:

INSERT INTO DATA_TEMP (ITEM, Q1, Q2, Q3, Q4, TOTAL)
SELECT DISTINCT
    DATA_2.ITEM,
    (SELECT AMOUNT AS Expr1
     FROM DATA
     WHERE (QTR = 1) AND (DATA_2.ITEM = ITEM) AND (FY = @fy)
       AND (BU = @bu) AND (PERIOD = @per)) AS Q1,
    (SELECT AMOUNT AS Expr1
     FROM DATA AS DATA_3
     WHERE (QTR = 2) AND (DATA_2.ITEM = ITEM) AND (FY = @fy)
       AND (BU = @bu) AND (PERIOD = @per)) AS Q2,
    (SELECT AMOUNT AS Expr1
     FROM DATA AS DATA_3
     WHERE (QTR = 3) AND (DATA_2.ITEM = ITEM) AND (FY = @fy)
       AND (BU = @bu) AND (PERIOD = @per)) AS Q3,
    (SELECT AMOUNT AS Expr1
     FROM DATA AS DATA_3
     WHERE (QTR = 4) AND (DATA_2.ITEM = ITEM) AND (FY = @fy)
       AND (BU = @bu) AND (PERIOD = @per)) AS Q4,
    (SELECT SUM(AMOUNT) AS Expr1
     FROM DATA AS DATA_3
     WHERE (DATA_2.ITEM = ITEM) AND (FY = @fy) AND (BU = @bu)
       AND (PERIOD = @per)) AS Total
FROM DATA AS DATA_2 INNER JOIN
     DATA AS DATA_1 ON DATA_2.ID = DATA_1.ID
WHERE (DATA_2.ITEM = @item)

Дает мне эту ошибку:

Ошибка Источник: Ошибка поставщика данных .Net SqlClientСообщение: параметр 3 ([C: \ test.MDF]. []. [Unknown]): тип CLR не существует или у вас нет прав на доступ к нему.

Странная вещьКогда я выполняю команды SELECT и INSERT INTO по отдельности, это работает нормально.Кроме того, он работает, когда я компилирую веб-сайт.

Но он не работает при использовании хранимых процедур, поэтому я хотел знать, что вызывает это.

Ответы [ 2 ]

2 голосов
/ 30 декабря 2014

Скорее всего, проблема связана с проблемой синтаксического анализа.

Попробуйте добавить следующее в окончательное предложение WHERE:

WHERE (DATA_2.ITEM = @item) AND (@fy = @fy) AND (@bu = @bu) AND (@per = @per)

Я подозреваю, что он зависает от параметров в части кода SELECT, которые не определены в последнем предложении where.

1 голос
/ 12 мая 2011

Вы могли бы написать этот запрос намного проще:

Insert DATA_TEMP( ITEM, Q1, Q2, Q3, Q4, TOTAL )
Select D2.ITEM
    , Min( Case When QTR = 1 Then D1.AMOUNT End ) As Q1
    , Min( Case When QTR = 2 Then D1.AMOUNT End ) As Q2
    , Min( Case When QTR = 3 Then D1.AMOUNT End ) As Q3
    , Min( Case When QTR = 4 Then D1.AMOUNT End ) As Q4
    , Sum( AMOUNT ) As Total
From DATA As D1
    Join DATA_2 As D2
        On D2.ID = D1.ID
Where ITEM = @item
    And FY = @fy
    And BU = @bu
    And PERIOD = @per
Group By D2.ITEM

Конечно, это не решает проблему с CLR, но может упростить тестирование.

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