簡體   English   中英

我可以從參數中選擇*嗎(例如@tableName)

[英]Can I SELECT*FROM a parameter (e.g. @tableName)

我正在嘗試優化存儲過程並減少任何冗余代碼。 現在有很多代碼是基於@schema參數復制的。 @Schema可以是測試環境,也可以是生產環境。

非常簡單的例子:

IF @schema = ’test’ BEGIN
SELECT*FROM test.dbo.test_results

END ELSE IF @schema = ‘prod’ BEGIN
SELECT*FROM final.dbo.final_results END;

看,相同的代碼,唯一的區別是表名。 除了我的項目中的代碼有數百行重復的代碼,唯一的區別是表名。

因此,我可以將參數設置為@tableName嗎?我可以在其中創建以下 case 語句?:

IF @schema = ‘test’ BEGIN
SET @tableName = ‘test.dbo.test_results’


END ELSE IF @schema = ‘prod’ BEGIN
SET @tableName = ‘final.dbo.final_results’

然后有以下代碼:

SELECT*FROM @tableName

如果沒有,還有其他推薦嗎?

SQL 服務器不支持宏替換,但可以不用動態 SQL。

這些表必須具有相同的結構,並且要清楚...我不確定這樣做是否明智。

Declare @Schema varchar(50) = 'Prod'

Select * From [test].[dbo].[test_results] Where @Schema = 'Test'
Union All
Select * From [final].[dbo].[final_results] Where @Schema = 'Prod'

我想我會使用不同的數據庫,特別是如果有很多(你說的數百個)。

然后切換連接字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM