我已经在.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分钟以上),并且当前数据库中没有很多数据
我该怎么办?
答案 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