我有一个存储过程返回SELECT
(无法将其转换为视图,因为它比select *
into newTable
from (StoredProcedure) t
稍微多一点)。我想将结果存储到一个新的非临时表中。
到目前为止,这是我尝试过的
CREATE PROCEDURE Soporte.ManejoSPs
@NombreSP nvarchar (200)
AS
declare @qry nvarchar (500)
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = @NombreSP + 'Table')
BEGIN
set @qry = 'select top 0 into ' + @NombreSP + 'Table from (@NombreSP) t'
print @qry
exec(@qry)
END
declare @Ultima datetime
declare @Tabla nvarchar(200)
declare @Minutos int
Select @Minutos = Minutos, @Tabla = NombreTabla, @Ultima = UltimaVez from Soporte.ManejoSP where NombreSP = @NombreSP
If (datediff(mi, @Ultima, getdate()) > @Minutos)
BEGIN
set @qry = 'INSERT INTO ' + @Tabla + ' exec ' + @NombreSP
exec(@qry)
END
set @qry = 'Select * from ' + @Tabla
exec(@qry)
但它引发了一个错误:
')附近的语法错误。
。
编辑:我的SP是
{{1}}
答案 0 :(得分:2)
注意:以下内容仅适用于SQL Server 2008 R2。对于SQL Server 2012+,这将无效(需要WITH RESULT SETS
,有关其规范的详细信息,请参阅here。)
如果您的存储过程被调用t
(在数据库db_name
和架构schema_name
中)并且表newTable
尚未存在:
SELECT
*
INTO
newTable
FROM
OPENROWSET (
'SQLNCLI',
'Server=localhost;Trusted_Connection=yes;',
'SET FMTONLY OFF; EXEC [db_name].[schema_name].t;'
);
如果服务器是命名实例,则需要提供正确的服务器参数(ServerName\Instance
)。
要使其正常工作,首先需要执行以允许Ad Hoc Distributed Queries
。你只需要执行一次。
sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
如果newTable
表已存在:
INSERT INTO newTable
EXEC t