Alter-Befehl (TMSL)
Gilt für: SQL Server 2016 und höher analysis Services Azure Analysis Services Fabric/Power BI Premium
Ändert ein vorhandenes Objekt, aber nicht seine untergeordneten Elemente. Wenn das Objekt nicht vorhanden ist, löst der Befehl einen Fehler aus.
Verwenden Sie den Alter-Befehl für gezielte Updates, z. B. das Festlegen einer Eigenschaft für eine Tabelle, ohne auch alle Spalten angeben zu müssen. Dieser Befehl ähnelt CreateOrReplace, muss jedoch keine vollständige Objektdefinition angeben.
Wenn Sie für Objekte mit Lese-/Schreibeigenschaften eine Lese-/Schreibeigenschaft angeben, müssen Sie alle mit neuen oder vorhandenen Werten angeben. Sie können AMO PowerShell verwenden, um eine Eigenschaftenliste abzurufen.
Anforderung
Alter verfügt über keine Attribute. Eingaben umfassen das zu ändernde Objekt, gefolgt von der geänderten Objektdefinition.
Das folgende Beispiel veranschaulicht die Syntax zum Ändern einer Eigenschaft für ein Partitionsobjekt. Der Objektpfad legt fest, welches Partitionsobjekt über Name-Wert-Paare übergeordneter Objekte geändert werden soll. Die zweite Eingabe ist ein Partitionsobjekt, das den neuen Eigenschaftswert angibt.
{
"alter": {
"object": {
"database": "\<database-name>",
"table": "\<table-name>",
"partition": "\<partition-name>"
},
"partition": {
"name": "\<new-partition-name>",
. . . << other properties
}
}
}
Die Struktur der Anforderung variiert je nach Objekt. Alter kann mit jedem der folgenden Objekte verwendet werden:
Datenbankobjekt (TMSL) Benennen Sie eine Datenbank um.
"alter": {
"object": {
"database": "\<database-name>"
},
"database": {
"name": "\<new-database-name>",
}
}
DataSources-Objekt (TMSL) Benennen Sie eine Verbindung um, die ein untergeordnetes Objekt der Datenbank ist.
{
"alter":{
"object":{
"database":"AdventureWorksTabular1200",
"dataSource":"SqlServer localhost AdventureworksDW2016"
},
"dataSource":{
"name":"A new connection name"
}
}
}
Tables-Objekt (TMSL) Siehe Beispiel 1 unten.
Partitions-Objekt (TMSL) Siehe Beispiel 2 unten.
Roles-Objekt (TMSL) Ändern einer Eigenschaft für ein Rollenobjekt.
{
"alter":{
"object":{
"database":"AdventureWorksTabular1200",
"role":"DataReader"
},
"role":{
"name":"New Name"
}
}
}
Antwort
Gibt ein leeres Ergebnis zurück, wenn der Befehl erfolgreich ist. Andernfalls wird eine XMLA-Ausnahme zurückgegeben.
Beispiele
Die folgenden Beispiele veranschaulichen ein Skript, das Sie in einem XMLA-Fenster in Management Studio ausführen oder als Eingabe in Invoke-ASCmd Cmdlet in AMO PowerShell verwenden können.
Beispiel 1 : Dieses Skript ändert die Namenseigenschaft für eine Tabelle.
{
"alter": {
"object": {
"database": "AdventureWorksDW2016",
"table": "DimDate"
},
"table": {
"name": "DimDate2"
}
}
}
Unter der Annahme eines lokalen namens instance (instance Name ist "tabellarisch") und einer JSON-Datei mit dem Alter-Skript ändert dieser Befehl einen Tabellennamen von DimDate in DimDate2:
invoke-ascmd -inputfile '\\my-computer\my-shared-folder\altertablename.json' -server 'localhost\Tabular'
Beispiel 2 : Dieses Skript benennt eine Partition um, z. B. am Ende des Jahres, wenn das aktuelle Jahr zum vorherigen Jahr wird. Stellen Sie sicher, dass Sie alle Eigenschaften angeben. Wenn Sie die Quelle nicht angegeben lassen, kann dies alle Vorhandenen Partitionsdefinitionen unterbrechen.
Es sei denn, Sie erstellen, ersetzen oder ändern das Datenquellenobjekt selbst, jede Datenquelle, auf die in Ihrem Skript verwiesen wird (z. B. im folgenden Partitionsskript), muss ein vorhandenes DataSource-Objekt in Ihrem Modell sein. Wenn Sie die Datenquelle ändern müssen, führen Sie dies als separaten Schritt aus.
{
"alter": {
"object": {
"database": "InternetSales",
"table": "DimDate",
"partition": "CurrentYear"
},
"partition": {
"name": "Year2009",
"source": {
"query": "SELECT [dbo].[DimDate].* FROM [dbo].[DimDate] WHERE [dbo].[DimDate].CalendarYear = 2009",
"dataSource": "SqlServer localhost AdventureworksDW2016"
}
}
}
}
Verwendung (Endpunkte)
Dieses Befehlselement wird in einer Anweisung des Aufrufs der Execute-Methode (XMLA) über einen XMLA-Endpunkt verwendet und auf folgende Weise verfügbar gemacht:
Als XMLA-Fenster in SQL Server Management Studio (SSMS)
Als Eingabedatei für das PowerShell-Cmdlet invoke-ascmd
Als Eingabe für einen SSIS-Task oder SQL Server-Agent Auftrag
Sie können kein vorgefertigtes Skript für diesen Befehl aus SSMS generieren. Stattdessen können Sie mit einem Beispiel beginnen oder ein eigenes schreiben.