2015-12-29 40 views
1

我得到它規定無效列「DatabaseSQL」當我嘗試將數據庫引用添加到輸出聲明類似下面的錯誤:輸出數據庫及其串

OUTPUT [DatabaseSQL] +'.dbo.Package' 'TableName', 'PackageID', inserted.PackageId, 
    Core.updXMLFragment('StatusID', inserted.StatusID, Deleted.StatusID) 
    INTO @OutputList 

如果我刪除DatabaseSQL並添加它像OUTPUT 'Database.dbo.Package...,這樣的字符串,那麼它工作正常,但我需要語句來實際識別數據庫並將其添加爲字符串,只是將它作爲字符串輸出不夠好。有任何想法嗎?

+0

@ lad2025道歉,我錯將SO代碼中的[]括號括起來。但是,即使我將它設置爲像'Declare @DatabaseSQL [DatabaseSQL]'這樣的變量,然後在您提到的輸出中,仍然會提供該錯誤。 – BruceyBandit

回答

1

你可以使用:DB_NAME()

OUTPUT DB_NAME() + '.dbo.Package', 'TableName', 'PackageID' ... 

如果存儲在變量使用DB名稱:

DECLARE @DatabaseSQL SYSNAME = QUOTENAME('name with space'); 
OUTPUT @DatabaseSQL + '.dbo.Package', 'TableName', 'PackageID' ... 

LiveDemo

+0

只要給它一個兩種方法的測試。想知道我是否可以在DB_NAME()中放置數據庫名稱? – BruceyBandit

+0

@BruceyBandit'想知道我是否可以在DB_NAME中放置數據庫名稱()'你能詳細說明一下嗎? – lad2025

+0

因此,如果我在Database1上,但我想引用數據庫2,我將其稱爲DB_NAME([Database2]),但發現不起作用。將使用sysname方法,但如果它顯示爲一個字符串,它會足夠聰明以注意數據庫引用嗎?示例:假設我將數據庫引用爲[$(database1)],以便始終指出不管數據庫名稱是否更改,如果我使用sysname方法,它是否會識別引用,如果字符串設置爲'[$ (數據庫1)]'?或者只是將它輸出爲字符串? – BruceyBandit