2010-04-06 12 views
0

J'essaie de voir une liste de tables de Adventureworks DB du schéma "Personne" dans Sql Server 2008. J'ai développé le SP suivant, mais après l'exécution comme suit il me donne l'erreur "Incorrect syntaxe près de ')' ". Savez-vous comment je peux réviser cette déclaration SP ou exec?SQL dynamique pour interroger une table Adventureworks

CREATE PROCEDURE [getTableNames] 
@SchemaName VARCHAR(50) 
AS 

BEGIN 
SET NOCOUNT ON; 
SET @SchemaName = 'PERSON' 
DECLARE @cmd AS VARCHAR(max) 
SET @SchemaName = RTRIM(@SchemaName) 
SET @cmd = N'SELECT TABLE_NAME ' + 
'FROM information_schema.Tables ' + 
'WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_SCHEMA = @SchemaName' 
END 

exec sp_executesql getTableNames, N'@SchemaName NVARCHAR(50), @SchemaName' 

Répondre

1

Vous n'avez pas besoin SQL dynamique:

select * from sys.tables 
where type_desc = 'BASE TABLE' and schema_id = schema_id(@SchemaName) 
+0

Merci, cela fonctionne aussi mais j'aime l'autre solution un peu mieux car j'ai besoin de lancer un SP à partir de mon code C#. – salvationishere

+0

Ceci est juste le SQL qui fonctionne et peut être dans un SP ou non. Il suffit de mettre cela entre le début et la fin de votre SP et vous avez terminé. – Todd

3

Vous n'avez pas réellement besoin d'utiliser ici SQL dynamique, plus votre sproc n'est pas tout à fait raison que vous n'êtes pas d'exécuter l'instruction @cmd. Il suffit d'utiliser:

CREATE PROCEDURE [getTableNames] 
@SchemaName VARCHAR(50) 
AS 
BEGIN 
    SET NOCOUNT ON 
    SELECT TABLE_NAME 
    FROM information_schema.Tables 
    WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = @SchemaName 
END 

EXECUTE getTableNames 'PERSON' 
+0

Sweet! Cela marche! Merci! – salvationishere