我想问一下如何打印' @ 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]方法。
希望这是有道理的。
答案 0 :(得分:2)
你可能想要使用这样的DB_NAME() -
SET @tablename = DB_NAME() + '.dbo.' + Value
但是,我真的不会做你看起来像你正在尝试的事情;并且更新任何表格&#39;例程是SQL中经典的反模式之一。随着时间的推移表现不佳,更难以跟踪什么做了什么,并使其与其他变化保持同步。更新每个不同作业的sprocs确实是一种更好的方法。