2010-09-17 9 views
6

Zrobiłem kwerendę wykonania wewnątrz sp i jestem exceuting kwerendę w sp użyciu exec(), ale podczas tworzenia sp otrzymuję błądWystąpił błąd "Domyślny schemat nie istnieje." podczas wykonywania kwerendy wykonania wewnątrz sp użyciu exec()

The default schema does not exist. 

SP jest:

CREATE PROCEDURE MySP 
    @tableName varchar(100) 

AS 
BEGIN 
    SET NOCOUNT ON; 

declare @selectQuery varchar(MAX) 

set @selectQuery = 'select * from ' + @tableName 

exec(@selectQuery) 

end 

życzliwej pomocy

Odpowiedz

14

Zastosowanie CREATE PROCEDURE dbo.MySP

Użytkownik jesteś zalogowany jako musi mieć non domyślny istniejący schemat.

DEFAULT_SCHEMA can be set to a schema that does not currently exist in the database.

Również należy użyć quotename(@tableName) i typ parametrów sysname zamiast varchar(100) uniknąć SQL injection czy tylko błędy z niestandardowych nazw obiektów.

+0

Dzięki ... to był problem. Po użyciu dbo.spname problem został rozwiązany. :) – HotTester

+0

Dobra uwaga dotycząca iniekcji sql. Czy są jakieś inne rzeczy, o których należy pamiętać przy użyciu dynamicznych zapytań w kontekście bezpieczeństwa i szybkości? – HotTester

+2

Tak. Zobacz [Klątwa i błogosławieństwa dynamicznego SQL - radzenie sobie z dynamicznymi nazwami tabel i kolumn] (http://www.sommarskog.se/dynamic_sql.html#objectnames) –

2

jest to prawdopodobnie dlatego, że domyślny schemat związany z użytkownikiem utworzył SP już nie istnieje lub użytkownik nie ma już dostępu do schematu.

Chociaż, myślałem, że SQL Server domyślnie ma schemat dbo. Może spróbuj sklasyfikować schemat dla Stored Proc.

np

Create Procedure dbo.MySP

+0

Otrzymuję błąd podczas tworzenia samego SP. – HotTester

+0

@HotTester - przepraszam błędnie przeczytałem twoje pytanie. Zaktualizowałem swoją odpowiedź – codingbadger

+0

+1 ... dziękuję za ans – HotTester

4

Można zmienić domyślny schemat:

ALTER USER [YOURDOMAIN\HotTester] WITH DEFAULT_SCHEMA=[dbo] 
GO 

następnie unikając konieczności włączania [dbo]. w CREATE PROCEDURE

+0

Dzięki. Miałem problemy z uruchamianiem skryptów przeciwko lazurowej bazie danych. Instalowałem umbraco cms na platformie hostingowej "azure". Domyślny schemat nie istnieje ... – Kieran

Powiązane problemy