为变量添加数据库和模式

时间:2015-12-23 17:23:17

标签: sql sql-server

我想问一下如何打印' @ tablename'的表格的数据库和模式名称。变量?这是因为更新只是简单地说表格名称如行李'和行李可以在DB1.dbo.Baggage'或者' DB2.dbo.Baggage',所以我想要检索正确的数据库和模式。

    select @tablename = ''
        select @tablename = Value

        print 'update ' + @tablename + '
                        set ' + @update + '
                        ' + @whereClause  +  isnull(@addnlClause, '') + '
                        if @@ROWCOUNT <> 1 
                            BEGIN
                                THROW 99999, ''Error - Single Row not updated, rollback terminated'', 1;
                            END'
                        set nocount off

更新:

好的,假设我有一个名为&#39; SupportAudit&#39;其中包含所有过程。我有一个名为&#39; Holidays&#39;它包含自己的表,另一个名为&#39; Reservations&#39;包含自己的表。以下是这些数据库可能具有的表格示例:

假日

dbo.Package

dbo.Product

Search.FlightList

Support.DataInputList

预订

dbo.Package

dbo.ProductPerson

Search.ProviderList

Support.DateRange

现在通常在我们的过程中,当我们引用这些表时,我们将它们称为[数据库]。[schema]。[tablename]。例如[假期]。[dbo]。[套餐]或[预订]。[支持]。[DateRange]。

现在在更新中只是一个打印,我们正在尝试回滚到上一次更新,所以我们希望打印引用我们想要更新的确切表,为此我们需要精确的表格使用[database]。[schema]。[tablename]方法。

希望这是有道理的。

1 个答案:

答案 0 :(得分:2)

你可能想要使用这样的DB_NAME() -

SET @tablename = DB_NAME() + '.dbo.' + Value

但是,我真的不会做你看起来像你正在尝试的事情;并且更新任何表格&#39;例程是SQL中经典的反模式之一。随着时间的推移表现不佳,更难以跟踪什么做了什么,并使其与其他变化保持同步。更新每个不同作业的sprocs确实是一种更好的方法。