存储过程输入参数

时间:2012-12-22 05:02:33

标签: sql sql-server-2008 stored-procedures

我正在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'

我哪里出错????????

3 个答案:

答案 0 :(得分:4)

您无法直接参数化tableName。您可以做到的唯一方法是创建一个动态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

答案 1 :(得分:2)

我不相信在该上下文中允许变量,使用我刚刚确认的以下过程中的变量:

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

答案 2 :(得分:2)

你可以这样做:

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

更多信息请参阅: Dynamic SQL