Sql-Server

如何將所有使用者定義的函式保存到本地硬碟上的 txt 文件中?

  • July 20, 2012

我正在執行 SQL Server 2008,需要備份我創建的 UDF 腳本/查詢。怎樣才能及時做到這一點?我嘗試右鍵點擊保存 UDF 的文件夾圖示(表值函式)以復製文件夾,但無法複製。

我唯一能想到的就是對我的 UDF 腳本中的每一個都使用 MODIFY 命令,然後將其複制並粘貼到單獨的文本文件中。

即使只有一種簡單的方法可以將所有腳本保存在一個文本文件而不是單獨的 txt 文件中,我也很樂意這樣做,而不必一次複製和粘貼每個文件。

有什麼建議?

SSMS(通過 SMO)允許您在類別(功能)級別編寫腳本。它不允許您僅指定表值函式。

在此處輸入圖像描述

在此處輸入圖像描述

在此處輸入圖像描述

您還可以查看類似這篇文章的內容,了解如何使用 PS 自動創建。您可能能夠過濾按函式類型(tvf、標量等)編寫腳本的對象

我能想到的最簡單的方法如下:

  1. 右鍵點擊您的數據庫 -> 任務 -> 生成腳本…
  2. 選擇特定的數據庫對象
  3. 選中復選框使用者定義的功能
  4. 保存到文件,然後將您的文本文件命名為您喜歡的任何名稱

這將為您的 UDF 生成腳本並將其保存到您想要的文件中。您可以使用 PowerShell(在我的腦海中)為每個 UDF 生成腳本並將它們保存到單獨的文本文件中(每個 UDF 一個文本文件)。

編輯:下面是一些 PowerShell 來做你想做的事。該腳本將獲取數據庫中的所有使用者定義函式(將變數設置為適當的環境)並將它們中的每一個的定義寫入它們自己的文件,將文件命名為函式的名稱。

$serverName = "YourServerName"          # example: "YourServer" or "YourServer\YourNamedInstance"
$databaseName = "YourDatabaseName"
$outputDirectory = "C:\Dir1\YourUDFs"   # the dir you want these files saved in

[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null

$server = New-Object Microsoft.SqlServer.Management.Smo.Server($serverName)
$database = $server.Databases.Item($databaseName)
$udfCol = $database.UserDefinedFunctions | Where-Object {$_.Schema -ne "sys"}
foreach ($udf in $udfCol) {
   $udfName = $udf.Name
   ($udf.TextHeader + $udf.TextBody) | 
       Out-File -FilePath $outputDirectory\$udfName".txt"
}

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