2

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

我哪里错了??????

4

3 回答 3

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
于 2012-12-22T05:05:13.443 回答
2

我不相信在这种情况下允许使用变量,请使用我刚刚确认的以下内容适用于您的程序:

exec('select * from [' + @database + '].[dbo].[sometable]')
于 2012-12-22T05:06:19.413 回答
2

你可以这样做:

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

更多信息请参阅:动态 SQL

于 2012-12-22T05:10:52.950 回答