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 に答える