2017-01-06 6 views
0

私はストアドプロシージャ内の別のデータベースのテーブルからデータを選択しようとします。他のデータベースの名前はパラメータで与えられます。ストアドプロシージャ内の別のデータベースからデータを選択

'無効なオブジェクト名[@DbName] .dbo.Setup'が表示されます。

CREATE PROCEDURE [dbo].[spUndeliverableOrders] 
    @DbName sysname 
AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @Sortfield nvarchar(50) 

    SET @Sortfield = (SELECT COALESCE(Text, 'ToDoListeDatum') AS SortField FROM [@DbName].dbo.Setup WHERE label like 'ComboBoxSetupBatchReihenfolge') 
END 
GO 

誰かがこの問題を解決するために私を助けることができますか?

+0

ここで動的SQLを使用する必要があります –

答えて

0

枚@ThomasSchremserは言った:あなたはどのような結果とテーブル/変数を移入するweither決定する点で最大

DECLARE @sqlquery varchar(1000) 
SET @sqlquery = '(SELECT COALESCE(Text, ''ToDoListeDatum'') AS SortField FROM ['[email protected]+'].dbo.Setup WHERE label like ''ComboBoxSetupBatchReihenfolge'')' 

それはあります。

のいずれかを使用:

insert into @table(column) exec @sqlquery... 

または

sp_executesql @sqlquery... 
0

あなたは

スクリプトごとに変更された
CREATE PROCEDURE [dbo].[spUndeliverableOrders] 
     @DbName sysname 
    AS 
    BEGIN 
     -- SET NOCOUNT ON added to prevent extra result sets from 
     -- interfering with SELECT statements. 
     SET NOCOUNT ON; 
     DECLARE @Str varchar(max) 

     CREATE TABLE #Result(Res VARCHAR(MAX)) 

     SET @Str = 'insert into #Result SELECT TOP 1 COALESCE(Text, ''ToDoListeDatum'') AS SortField FROM ['[email protected]+'].dbo.Setup WHERE label like ''ComboBoxSetupBatchReihenfolge''' 

     exec(@str) 

     select Res from #Result 
    END 
0

以下のように動的なクエリを使用する必要があります。

DECLARE @Str varchar(max) 
    CREATE TABLE #Result(Res VARCHAR(MAX)) 

    SET @Str = ' SELECT TOP 1 COALESCE(Text, ''ToDoListeDatum'') AS SortField FROM ['[email protected]+'].dbo.Setup WHERE label like ''ComboBoxSetupBatchReihenfolge''' 
    insert into #Result 
    EXEC(@Str) 
関連する問題