Come chiamerei una stored procedure che restituisce i dati in una vista? È possibile?Come chiamare la stored procedure in una vista?
risposta
Questa costruzione non è consentita in SQL Server. Una funzione con valori inline può essere eseguita come una vista parametrizzata, ma non è ancora possibile chiamare un SP come questo.
Ecco alcuni esempi di utilizzo di un SP e di un TVF in linea in modo intercambiabile: vedrete che il TVF è più flessibile (in pratica è più simile a una vista che a una funzione), quindi dove è possibile utilizzare un TVF in linea, possono essere più ri-eusable:
CREATE TABLE dbo.so916784 (
num int
)
GO
INSERT INTO dbo.so916784 VALUES (0)
INSERT INTO dbo.so916784 VALUES (1)
INSERT INTO dbo.so916784 VALUES (2)
INSERT INTO dbo.so916784 VALUES (3)
INSERT INTO dbo.so916784 VALUES (4)
INSERT INTO dbo.so916784 VALUES (5)
INSERT INTO dbo.so916784 VALUES (6)
INSERT INTO dbo.so916784 VALUES (7)
INSERT INTO dbo.so916784 VALUES (8)
INSERT INTO dbo.so916784 VALUES (9)
GO
CREATE PROCEDURE dbo.usp_so916784 @mod AS int
AS
BEGIN
SELECT *
FROM dbo.so916784
WHERE num % @mod = 0
END
GO
CREATE FUNCTION dbo.tvf_so916784 (@mod AS int)
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM dbo.so916784
WHERE num % @mod = 0
)
GO
EXEC dbo.usp_so916784 3
EXEC dbo.usp_so916784 4
SELECT * FROM dbo.tvf_so916784(3)
SELECT * FROM dbo.tvf_so916784(4)
DROP FUNCTION dbo.tvf_so916784
DROP PROCEDURE dbo.usp_so916784
DROP TABLE dbo.so916784
Dovresti scrivere la vista come in basso.
Scriverai essenzialmente i risultati del tuo proc in una tabella var o temp table, quindi selezionerai nella vista.
Modifica - Se è possibile modificare la stored procedure per una funzione tabella dei valori, si eliminerebbe la fase di selezionare per una tabella temporanea.
** Modifica 2 ** - I commenti sono corretti che uno sproc non può essere letto in una vista come suggerito. Invece, convertire il proc a una funzione di tabella-value come detto in altri post e scegliere da che:
create view sampleView
as select field1, field2, ...
from dbo.MyTableValueFunction
Mi scuso per la confusione
Sono abbastanza sicuro che non è possibile farlo in SQL Server. –
In realtà, sono certo che non è possibile farlo, perché le viste non sono autorizzati ad avere BEGIN END blocchi in primo luogo. –
Hai ragione ... investingating. So di aver popolato le visualizzazioni prima in un modo simile. –
Se si utilizza SQL Server 2005 è possibile utilizzare le funzioni con valori di tabella . Puoi chiamarli direttamente e passare i paramter, trattandoli come se fossero tavoli.
Per maggiori informazioni controllare Table-Valued User-Defined Functions
Sembra che le funzioni con valori di tabella siano disponibili anche in SQL Server 2000: http://www.devarticles.com/c/a/SQL-Server/Creating-User-Defined-Functions-In-SQL-Server- 2000/4/ – polara
create view sampleView as
select field1, field2, ...
from dbo.MyTableValueFunction
si noti che anche se il vostro MyTableValueFunction non accetta alcun parametro, è ancora necessario includere parentesi dopo, vale a dire:
... from dbo.MyTableValueFunction()
Senza le parentesi, riceverai un errore "Nome oggetto non valido".
exec sp_addlinkedserver
@server = 'local',
@srvproduct = '',
@provider='SQLNCLI',
@datasrc = @@SERVERNAME
go
create view ViewTest
as
select * from openquery(local, 'sp_who')
go
select * from ViewTest
go
Ho provato questo, ma quando provo a eseguire select * da openquery, mi dice: Provider OLE DB "SQLNCLI11" per server collegato "locale" ha restituito il messaggio "Timeout di accesso scaduto". –
Sono stato in grado di chiamare stored procedure in una vista (SQL Server 2005).
CREATE FUNCTION [dbo].[dimMeasure]
RETURNS TABLE AS
(
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost; Trusted_Connection=yes;', 'exec ceaw.dbo.sp_dimMeasure2')
)
RETURN
GO
All'interno stored procedure abbiamo bisogno di impostare:
set nocount on
SET FMTONLY OFF
CREATE VIEW [dbo].[dimMeasure]
AS
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', 'exec ceaw.dbo.sp_dimMeasure2')
GO
CREATE VIEW [dbo].[dimMeasure]
AS
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;'
, 'exec ceaw.dbo.sp_dimMeasure2')
GO
Invece di postare un'altra risposta con l'altra metà della risposta, che ne dici di modificare la tua precedente per includere tutto ciò che intendi? (Che ho fatto per te, controlla di averlo fatto correttamente.) Ora per favore cancella questo, a meno che tu non intenda realmente due risposte diverse alla stessa domanda. –
- 1. Chiamare una stored procedure in una stored procedure in MySQL
- 2. Come chiamare una stored procedure da un'altra stored procedure?
- 3. Come chiamare una stored procedure in CodeIgniter?
- 4. Come chiamare una stored procedure in JDBC
- 5. Come chiamare una stored procedure utilizzando ado.net
- 6. Chiamare una stored procedure in rospo
- 7. Chiamare la stored procedure Oracle da C#?
- 8. Come chiamare stored procedure (con 2 parametri) in una stored procedure?
- 9. Come chiamare stored procedure su Laravel?
- 10. come chiamare una stored procedure in cui clausola di SQL
- 11. Come chiamare la funzione C# in stored procedure
- 12. Come chiamare una stored procedure (con parametri) da un'altra stored procedure senza tabella temporanea
- 13. Entity Framework CTP5 - Come chiamare la stored procedure?
- 14. Chiamare una stored procedure in Postgresql tramite F # e Npgsql
- 15. È possibile chiamare una stored procedure utilizzando LINQ in LINQPad?
- 16. Impossibile chiamare la stored procedure di Oracle e la funzione
- 17. Come pianificare una stored procedure?
- 18. Come scrivere una stored procedure in phpMyAdmin?
- 19. Come programmare una stored procedure in AZURE
- 20. Come modificare la stored procedure di PostgreSQL?
- 21. Chiamare una stored procedure definita dall'utente dall'istruzione select mysql
- 22. Come utilizzare la stored procedure in SqlCE
- 23. DocumentDB chiamata stored procedure da un'altra stored procedure o stessa
- 24. stored procedure con sqlAlchemy
- 25. Stored procedure restituisce una stringa?
- 26. Stored procedure vs nessuna stored procedure - Security Viewpoint
- 27. Come scrivere mappature per una stored procedure
- 28. Come si eliminano i risultati da una stored procedure da una stored procedure?
- 29. Come posso partecipare a una stored procedure?
- 30. Rinominare una stored procedure in SQL Server
Duplicate: http://stackoverflow.com/questions/349979/execute-a-sql-stored -proc-from-a-sql-view – Russ