2010-09-17 8 views
6

ho fatto una query runtime all'interno di una sp e sto exceuting la query all'interno della sp utilizzando exec(), ma quando si crea la sp sto ottenendo l'erroreErrore di visualizzazione di "Lo schema predefinito non esiste." durante l'esecuzione di query runtime all'interno sp utilizzando exec()

The default schema does not exist. 

l'SP è:

CREATE PROCEDURE MySP 
    @tableName varchar(100) 

AS 
BEGIN 
    SET NOCOUNT ON; 

declare @selectQuery varchar(MAX) 

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

exec(@selectQuery) 

end 

aiuto gentile

risposta

14

Usa CREATE PROCEDURE dbo.MySP

L'utente che si è connessi come deve avere uno schema predefinito inesistente.

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

Inoltre si dovrebbe usare quotename(@tableName) e un tipo di parametro di sysname piuttosto che varchar(100) per evitare SQL injection o solo errori da nomi degli oggetti non standard.

+0

Grazie ... questo era il problema. Dopo aver usato il problema dbo.spname è stato risolto. :) – HotTester

+0

Un buon punto per quanto riguarda l'iniezione sql. Ci sono altre cose da tenere a mente usando le query dinamiche nel contesto della sicurezza e della velocità? – HotTester

+2

Sì. Vedi [The Curse and Blessings of Dynamic SQL - Gestire i nomi dinamici di tabelle e colonne] (http://www.sommarskog.se/dynamic_sql.html#objectnames) –

2

è probabilmente perché lo schema predefinito associato all'utente la creazione non è più la SP esiste o l'utente non ha più accesso allo schema.

Anche se, ho pensato che SQL Server fosse in default per lo schema dbo. Forse prova a qualificare lo schema per il Procace Stored.

es

Create Procedure dbo.MySP

+0

Ricevo l'errore durante la creazione del SP stesso. – HotTester

+0

@HotTester - scusa non ho letto la tua domanda. Ho aggiornato la mia risposta – codingbadger

+0

+1 ... grazie per l'ans – HotTester

4

si potrebbe cambiare il vostro schema predefinito:

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

quindi evitando di dover includere [dbo]. nella CREATE PROCEDURE

+0

Grazie. Ho avuto problemi nell'esecuzione di script su un database azzurro. Stavo installando umbraco cms sulla piattaforma di hosting azzurro ottenendo "Lo schema predefinito non esiste" ... – Kieran

Problemi correlati