Sql-Server

如何將數據庫列表傳遞給 sp_MSforeachdb?

  • May 8, 2020

我有以下腳本,執行時會給我一個逗號分隔的數據庫名稱列表。

       SET NOCOUNT ON
       declare @db_list NVARCHAR(MAX)
       DECLARE @command varchar(1000)

       SELECT @COMMAND = 'SELECT DB_NAME()'

        SELECT @db_list  = STUFF((
                                   SELECT ', ' + name FROM sys.databases
                                   WHERE name like '__Order'
                                   FOR XML PATH(''), 
                                   TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '')

        -- in case there are no DBs to show, then show no DB '***'
        select @db_list = COALESCE(@db_list,'***') 

        SELECT @db_list = RTRIM(LTRIM(REPLACE(@DB_LIST,',', ',''')))  


        select @db_list 

這給了我以下結果:

UKOrder,' ATOrder,' AUOrder

1)這給出了錯誤的結果集,我希望它是

'UKOrder','ATOrder','AUOrder'
  1. 如何將@db_list 傳遞給 sp_MSforeachdb?

假設我想跑步

選擇 db_name()

在@db_list 中的每個數據庫中

英國訂單

訂單

訂單

你不能。此外,您也不應該在它似乎可以工作的情況下使用這個無證的、不受支持的、有缺陷的過程。我在這里這裡寫了一個更好的替代品。

事實上,我編寫的程序確實支持一個參數@database_list,格式為'db1, db2, db3'(注意根本不需要對嵌入的單引號大驚小怪),因此根據您的需要採用它 - 而不是重新發明輪子 - 似乎是合乎邏輯的。

如果您需要有關從集合中建構分隔字元串以用於其他目的的語法幫助,請創建一個不同的問題。如果您確實需要將每個數據庫名稱用自己的引號括起來,則REPLACE命令中的最後一個字元串元素應該是''',''',並且您還需要在開始和結束時用單引號將最終結果括起來。

引用自:https://dba.stackexchange.com/questions/129666