Sql server 从StoredProcess中的另一个数据库中选择数据

Sql server 从StoredProcess中的另一个数据库中选择数据,sql-server,stored-procedures,Sql Server,Stored Procedures,我尝试在StoredProcess中从另一个数据库的表中选择数据,另一个数据库的名称由参数给出。我收到一条错误消息: '无效的对象名[@DbName].dbo.Setup' 有人能帮我解决这个问题吗?就像@ThomasSchremser说的: DECLARE @sqlquery varchar(1000) SET @sqlquery = '(SELECT COALESCE(Text, ''ToDoListeDatum'') AS SortField FROM ['+@DbName+'].dbo.

我尝试在StoredProcess中从另一个数据库的表中选择数据,另一个数据库的名称由参数给出。我收到一条错误消息:

'无效的对象名[@DbName].dbo.Setup'


有人能帮我解决这个问题吗?

就像@ThomasSchremser说的:

DECLARE @sqlquery varchar(1000)
SET @sqlquery = '(SELECT COALESCE(Text, ''ToDoListeDatum'') AS SortField FROM ['+@DbName+'].dbo.Setup WHERE label like ''ComboBoxSetupBatchReihenfolge'')'
由您决定如何使用结果填充表/变量

或使用:

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


您需要使用动态查询,如下所示

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 ['+@DbName+'].dbo.Setup WHERE label like ''ComboBoxSetupBatchReihenfolge'''

        exec(@str)

        select Res from #Result
    END

根据脚本修改:

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

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

这里必须使用动态SQL
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 ['+@DbName+'].dbo.Setup WHERE label like ''ComboBoxSetupBatchReihenfolge'''

        exec(@str)

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

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