Создать динамическую таблицу - PullRequest
0 голосов
/ 03 июля 2019

Я создал интерфейс между моим .net-приложением и SQL-сервером Итак, я сделал запрос к своему пользовательскому представлению, но некоторые поля не видны в этом представлении, поэтому я хотел бы знать, есть ли способ создать динамическую таблицу через SP Я объясню свое желание с помощью некоторого кода:

SELECT DISTINCT
            P.*,
            OC.OrganismeClient,
        INTO db.pjrep.NewTable ----> This table is create here
        FROM
            DB.pjrep.MSP_EpmProject_UserView P

        --> Organisme client
            LEFT JOIN
                    (
                    SELECT
                        EntityUID as ProjectUID,
                        CAST(MemberValue as NVARCHAR(255)) as OrganismeClient
                    FROM
                        DB.pjrep.[MSPCFPRJ_Table] AA
                        JOIN DB.pjrep.MSP_EpmLookupTable LT on LT.MemberUID = AA.LookupMemberUID 
                    )
                    OC on OC.ProjectUID = P.ProjectUID

так что, как только это будет сделано, я хотел бы иметь возможность:

SELECT "FIELDS WHICH COME MY .NET INTERFACE"
FROM db.pjrep.NewTable

Но это не работает, моя хранимая процедура выполняется в течение очень долгого времени (я позволил ей работать более 15 минут), и в моей текущей БД не хватает данных

Есть идеи, что я могу сделать?

1 Ответ

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

Хочу только отметить, что я согласен с @Larnu по поводу производительности. Это похоже на крошечный запрос и не должен занимать так много времени. Я хотел бы убедиться, что не существует какого-либо перекрестного соединения. Тот факт, что у вас есть DISTINCT, говорит мне о том, что вы, возможно, возвращаете тонну повторяющихся строк, и для их удаления необходимы отличные. Попробуйте запустить его без четкого, чтобы увидеть.

Тем не менее, если вам нужно создать таблицу в SP, вы можете использовать динамический SQL. Этот пример имеет его в качестве параметра, поэтому вам следует учитывать, что это может быть SQL-инъекция. В противном случае вы можете просто создать переменную внутри SP. Вот пример:

--create sproc

CREATE PROCEDURE pjrep.CreateTempTable
    @Table_Param VARCHAR(200)

AS

DECLARE @sql NVARCHAR(MAX) = 
'
SELECT DISTINCT
            P.*,
            OC.OrganismeClient
        INTO pjrep.' + @Table_Param + '
        FROM
            pjrep.MSP_EpmProject_UserView P
            LEFT JOIN
                    (
                    SELECT
                        EntityUID as ProjectUID,
                        CAST(MemberValue as NVARCHAR(255)) as OrganismeClient
                    FROM
                        pjrep.[MSPCFPRJ_Table] AA
                        JOIN pjrep.MSP_EpmLookupTable LT on LT.MemberUID = AA.LookupMemberUID 
                    )
                    OC on OC.ProjectUID = P.ProjectUID'

EXEC sp_executesql @sql

go



--run sproc
EXEC pjrep.CreateTempTable 'NewTable'

--view results
SELECT * FROM pjrep.NewTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...