Jak nazwać procedurę składowaną, która zwraca dane w widoku? Czy to możliwe?Jak wywołać procedurę składowaną w widoku?
Odpowiedz
Ta konstrukcja nie jest dozwolony w SQL Server. Inline funkcja o wartości tabelarycznej może działać jako sparametryzowany widok, ale nadal nie może wywoływać takiego SP.
Oto kilka przykładów używania SP i wbudowanego TVF wymiennie - zobaczysz, że TVF jest bardziej elastyczny (w zasadzie bardziej przypomina widok niż funkcję), więc jeśli można użyć wbudowanej TVF, mogą one być bardziej re-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
Musisz napisać scenariusz widoku jak poniżej.
Zasadniczo zapiszesz wyniki swojego procesu do tabeli var lub temp table, a następnie wybierz do widoku.
Edit - Jeśli można zmienić procedurę przechowywaną do funkcji Wartość stołowy, byłoby wyeliminować etap selekcji do tabeli temp.
** Edytuj 2 ** - Komentarze są poprawne, że sproc nie może zostać odczytany w widoku, który sugerowałem. Zamiast zamienić proc do funkcji tabeli wartości jak wspomniano w innych postach i wybierz z tego:
create view sampleView
as select field1, field2, ...
from dbo.MyTableValueFunction
Przepraszam za zamieszanie
Jestem prawie pewien, że nie można tego zrobić w SQL Server. –
Właściwie, jestem pewien, że nie możesz tego zrobić, ponieważ poglądy nie mogą mieć bloków BEGIN END w pierwszej kolejności. –
Masz rację ... inwestujesz. Wiem, że wcześniej zaludniłem poglądy w podobny sposób. –
Jeśli używasz SQL Server 2005 można użyć funkcji tabeli wyceniane . Możesz wywoływać je bezpośrednio i przekazywać parametry, traktując je jak tabele.
Aby uzyskać więcej informacji sprawdź Table-Valued User-Defined Functions
Wygląda na to, że funkcje z wartościami tabel są również dostępne w SQL Server 2000: http://www.devarticles.com/c/a/SQL-Server/Ustawianie-User- Defined-Functions-In-SQL-Server- 2000/4/ – polara
create view sampleView as
select field1, field2, ...
from dbo.MyTableValueFunction
Należy pamiętać, że nawet jeśli MyTableValueFunction nie przyjmuje żadnych parametrów, trzeba jeszcze zawierać nawiasy po nim, czyli:
... from dbo.MyTableValueFunction()
Bez nawiasów otrzymasz komunikat o błędzie "Nieprawidłowy obiekt".
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
Próbowałem tego, ale gdy próbuję uruchomić wybierz * z openquery, to mówi mi: Dostawca OLE DB "SQLNCLI11" dla serwera połączonego "lokalny" zwrócił komunikat "Limit czasu logowania wygasł". –
Udało mi się wywołać procedurę przechowywaną w widoku (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
Wewnątrz procedury przechowywanej musimy ustawić:
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
Zamiast zamieszczać inną odpowiedź z drugą połową odpowiedzi, a może chcesz edytować poprzednią, aby zawierała wszystko, co chcesz? (Co zrobiłem dla ciebie, sprawdź, czy zrobiłem to poprawnie.) Teraz proszę usuń to, chyba że naprawdę zamierzałeś dwie różne odpowiedzi na to samo pytanie. –
- 1. Jak wywołać procedurę składowaną o niekonwencjonalnych parametrach?
- 2. Jak wywołać procedurę składowaną przez hibernację?
- 3. Jak zaplanować procedurę składowaną?
- 4. Jak wywołać procedurę składowaną Oracle ze skryptu Excel VBA?
- 5. Jak automatycznie uruchamiać procedurę składowaną w harmonogramie?
- 6. Zobacz procedurę składowaną/definicję funkcji w MySQL
- 7. Zaszyfruj procedurę składowaną utworzoną przez SqlDependency
- 8. Serwer SQL - czy można wykonać procedurę składowaną
- 9. Jak wywołać procedurę składowaną (z parametrami) z innej procedury składowanej bez tabeli tymczasowej
- 10. Jak wywołać procedurę przechowywaną w JDBC
- 11. Jak wdrożyć zarządzaną procedurę składowaną bez użycia Visual Studio?
- 12. Sybase IQ - jak wyświetlić procedurę składowaną bez zawijania tekstu?
- 13. Jak uruchomić procedurę składowaną za pomocą usługi Azure Automation?
- 14. Jak utworzyć procedurę składowaną za pomocą bazy danych H2?
- 15. utwórz procedurę składowaną, jeśli nie istnieje w serwerze sql
- 16. Jak wywołać procedurę przechowywaną na Laravel?
- 17. jak wywołać procedurę przechowywaną, gdzie klauzula SQL
- 18. Jak wywołać procedurę przechowywaną MySQL z Rails?
- 19. Jak wywołać procedurę przechowywaną przy użyciu ADO.NET
- 20. Czy można wykonać procedurę składowaną na zestawie bez użycia kursora?
- 21. Linq do SQL - czy istnieje sposób odwzorowania metody rozszerzenia na procedurę/procedurę składowaną SQL?
- 22. Jak wykonać procedurę składowaną Oracle za pośrednictwem łącza do bazy danych
- 23. Jak wywołać usługę Grails w widoku?
- 24. Jak wywołać procedurę przechowywaną mysql z argumentami z wiersza poleceń?
- 25. Jak wywołać procedurę przechowywaną MySQL z poziomu kodu PHP?
- 26. Jak wywołać procedurę przechowywaną z EntityFramework 6 z parametrem "hierarchyid"
- 27. Jak wywołać procedurę przechowywaną z NHibernate, która nie daje wyniku?
- 28. Jak wywołać procedurę przechowywaną programu SQL Server z programu PowerShell?
- 29. Czy mogę wywołać procedurę przechowywaną z kryteriami hibernacji?
- 30. Jak dodać procedurę Przetrzymuj/zatrzymaj w SQL przechowywaną procedurę
Duplikat: http://stackoverflow.com/questions/349979/execute-a-sql-stored -proc-z-a-sql-view – Russ