我正在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'
我哪里出错????????
答案 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