2010-04-06 47 views
0

我試圖從Sql Server 2008中的「Person」模式中查看Adventureworks數據庫中的表的列表。我開發了以下SP,但運行後如下,它給我錯誤「Incorrect語法靠近')'「。你知道我該如何修改這個SP或exec聲明嗎?查詢Adventureworks表的動態SQL

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' 

回答

1

你不需要動態SQL:

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

謝謝,這也適用,但我更喜歡其他解決方案,因爲我需要從我的C#代碼運行SP。 – salvationishere 2010-04-06 21:49:24

+0

這只是工作的SQL,可以在SP中或不在。只要把它放在SP的開始和結束之間,你就完成了。 – Todd 2010-04-07 13:20:05

3

你實際上並不需要在這裏使用動態SQL,再加上因爲你不執行@cmd陳述你的存儲過程是不完全正確。只需使用:

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

甜!這工作!謝謝! – salvationishere 2010-04-06 21:48:17