创建动态表

时间:2019-07-03 09:15:51

标签: sql-server stored-procedures

我已经在.net应用程序和SQL Server之间建立了一个接口 因此,我已经完成了查询用户视图的操作,但是某些字段在该视图中不可见,因此我想知道是否可以通过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 :(得分:0)

我只想指出,我同意@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