2017-01-12 11 views
0

FRAGE aktualisiert wurde:

Lasst uns sagen, ich habe zwei Tabellen:

Table1
ID_Ticket | Ticket_Quantity | Total_Price(Calculated field) -------------------------------------------- 2 | 5 | x 1 | 3 | y

Table2
ID_Ticket | Ticket_Price ------------------------ 1 | 4.5 2 | 5
ich den Benutzer der Datenbank verhindern wollen um das Feld Total_Price zu füllen (über Top 200 Zeilen oder Abfragen bearbeiten), möchte ich, dass es als Ticket_Price * Ticket_Quantity berechnet wird und automatisch in diese Zeile eingefügt wird.

In diesem Fall sollte x sein 25 und y sollte 13,5 sein (die Werte automatisch insterted werden sollte, sobald Ticket_Quantity und Ticket_Price für diese Zeile gefüllt sind)

I eine Funktion wie folgt geschrieben:
CREATE FUNCTION Multiply(@x DECIMAL(19,4), @y DECIMAL (19,4)) RETURNS DECIMAL(19,4) AS BEGIN SELECT @x * Ticket_Price FROM Table2 WHERE ID_Ticket = @y END

aber es ist ein Fehler:

Select-Anweisungen in einer Funktion enthalten ist, kann keine Daten zurückgegeben zu einem Client

auch wenn ich das berechnete Feld hinzugefügt werden soll, basierend auf der Funktion:
ALTER TABLE Purchases ADD Total_Price AS Multiply(Table2.Ticket_Price,Ticket_Quantity);
Th Die Abfrage führt nicht aus und gibt mir diesen Fehler:

Die mehrteilige Kennung "Product.Prod_Price" konnte nicht gebunden werden.



Wie sollte ich die Werte aus Table2 aufrufen und die Multiply-Funktion korrigieren? gehenWie SQL-Feld automatisch vervollständigen, basierend auf derselben Zeile Felder

im Objekt-Explorer (links) auf diesem Weg:

+0

Verwenden Sie Stored Procedure, um Datensätze in Ihre Datenbank einzufügen, veröffentlichen Sie Ihre Tabellen nicht. Noch nie. Verwenden Sie schreibgeschützte Ansichten zum Veröffentlichen von Informationen. – McNets

+0

Machen Sie es zu einem berechneten Feld. –

+0

@McNets meine Entschuldigung. Mit user meinte ich den Datenbankmanager (wer kann die Datenbank benutzen und modifizieren) – noviceprogrammer

Antwort

0

fand ich eine Lösung, also werde ich es für zukünftige Leser schreiben, die das gleiche Problem haben
Databases --> <your_database_name> --> programmability --> functions
Rechtsklick auf die Funktionen Ordner und wählen Sie New --> Scalar-valued function
die folgende Funktion Skript einfügen (< Variablen ersetzen> mit denen, die zu Ihrer Datenbank entsprechen):

CREATE FUNCTION dbo.Multiply(@id INT, @price DECIMAL(19,4)) 
--or (@x float, @y money) depending on the type of your columns you have 
RETURNS DECIMAL(19,4) 
--RETURNS <data_type_of_the_calculated_column_you_want> 
AS 
BEGIN 
    RETURN 
    (SELECT @price * Ticket_Price 
    --SELECT @<second_argument/column_name_of_Table1>*<column_name_of_Table2> 
    FROM Table2 
    --FROM <your_Table2_name> 
    WHERE ID_Ticket = @id) 
    --WHERE <unique/PrimaryKey_Column_to_identify_the_row_in_Table2> 
    -- = @<ForeignKey_Column_to_identify_the_row_in_Table2> 
END 

Und führe es aus. Erstellen
nun eine neue Abfrage (Strg + N), um die berechnete Spalte in Table1 und copy-paste die folgende Abfrage hinzuzufügen:

ALTER TABLE Table1 
--ALTER TABLE <your_Table1_name> 
ADD Total_Price AS dbo.Multiply(ID_Ticket,Ticket_Quantity); 
--ADD <name_of_the_calculated_row_you_like> AS 
-- dbo.<Function_Name>(<id_column_name_of_Table2>,<column_name_from_Table1>) 

Führen Sie die Abfrage.
Jetzt sollte die berechnete Spalte die Multiplikation der Spalten von Table1 und Table2 sein.

Verwandte Themen