2012-12-22 374 views
1

我創建SQL Server中的存儲過程2008如本存儲過程輸入參數

-- the code 
create procedure proce 
@database varchar(50) 
as 
begin 
select * from [@database].[dbo].[sometable] 
end 

的程序被編譯

但是當我執行使用

-- here i execute it 
execute proce 'somedatabase' 

它的程序引發錯誤

-- me gets error :(
Invalid object name '@database.dbo.sometable' 

我在哪裏出錯???????

+1

你需要使用動態TSQL –

回答

3

不能直接參數表名。你可以做的唯一方法是製作一個動態的SQL語句。

例如,

CREATE PROCEDURE proce @database VARCHAR(50) 
AS 
BEGIN 
    DECLARE @SQLQuery AS NVARCHAR(500) 
    SET @SQLQuery = 'SELECT * FROM [' + @database + '].[dbo].[sometable]' 
    EXECUTE(@SQLQuery) 
END 
GO 
3

我不相信變量被允許在這種情況下,使用我剛剛確認了你的程序的作品如下:

exec('select * from [' + @database + '].[dbo].[sometable]') 
2

你可以用這個去:

DECLARE @string AS NVARCHAR(500) 
SET @string = 'select * from [' + @database + '].[dbo].[sometable]' 
EXEC (@string) 

更多詳細信息請參考:Dynamic SQL