0
我有這樣的事情:我應該使用動態SQL或有另一種方式
AND t2.AUD_ORGID IN (SELECT Org_ID
FROM [development_company_database].[dbo].fx_Rights_ORGIDs(@ORG_ID))
我工作的數據庫A和fx_Rights_ORGIDs
是數據庫B.我應該使用動態SQL連接到它(我真的不希望)
Dymamic:
SET @MANDB = (SELECT DatabseDB FROM SERVER)
SET @MANOwner = (SELECT DatabaseOwner FROM SERVER)
SET @serverMan = (Select @DatabseDB +'.'+ @DatabaseOwner) ...
...AND t2.AUD_ORGID IN (SELECT Org_ID FROM ['+ @COMPANYDB +'].['+ @COMPANYOwner +'].fx_Rights_ORGIDs('+ CAST(@ORG_ID AS VARCHAR) + '))
...EXEC sp_executesql @Tsql2
只是想知道有沒有辦法解決辦法,我不想硬編碼這樣的數據庫:
[development_company_database].[dbo].
爲什麼你不想硬編碼數據庫名稱?我可以看到你希望如何避免在代碼中使用數據庫名稱,但是使用動態SQL來解決這個問題會導致代碼變得混亂(可能更慢)。如果您需要更換數據庫名稱,請執行簡單的搜索並替換。 – SchmitzIT
@SchmitzIT:我可以將連接細節分配給@variables並使用它們嗎?類似於@ @ serverMan.fx_Rights_ORGIDs' – TheUser
是的,你可以做到這一點。但是,您必須將查詢存儲在SQL字符串中。即'SELECT @sql ='SELECT * FROM'+ @database +'。' + @owner +'.tableName''。儘管萬一出現了問題,但它會使調試過程複雜化。我通常最終使用'PRINT @ sql'來生成一個可執行語句,然後可以將其複製/粘貼到新窗口以測試結果集。 – SchmitzIT