2017-05-20 2 views
1

Ich habe erfolgreich die folgende Funktion für die SQL-Datenbank erstellt.SQL-Funktion nicht in der richtigen SQL-Datenbank erstellt

CREATE FUNCTION [dbo].[maximum_time] 
(
    @TotalLengthofRecords REAL 
) 
RETURNS FLOAT 
AS 
BEGIN 
    RETURN 
     CASE 
      WHEN @TotalLengthofRecords > 3600 THEN 3600 
      ELSE @TotalLengthofRecords 
     END 
END 

die Objekte in Microsoft SQL Server Management Studio überprüfen, so scheint es, dass die benutzerdefinierte Funktion in den System Database -> master erfolgreich erstellt wurde. Die Funktion wird jedoch nicht in der Projektdatenbank angezeigt.

Jedes Mal, wenn ich versuche, um die Funktion aufzurufen mit dem folgenden Code:

SELECT 
    A.*, 
    [dbo].[maximum_time]([TotalLengthofRecords_MAX])AS [TotalLengthofRecords_MAX] 
    INTO [dbo].[BunkerAISFinal_V7] 
    FROM [dbo].[BunkerAISFinal_V6] AS A; 

Das System wird die folgenden Fehler werfen:

Cannot find either column "dbo" or the user-defined function or aggregate "dbo.maximum_time", or the name is ambiguous.

Wie löse ich dieses Problem? Gibt es eine Möglichkeit, die Funktion in einem bestimmten Datenbanknamen zu erstellen?

+0

Versuchen Sie, [hier] (http://stackoverflow.com/questions/2091830/cannot-find-either-column -dbo-oder-der-Benutzer-definierte-Funktion-oder-Aggregat-dbo-s). Gleiches Problem. Kann dir helfen. –

+0

Ich habe mir die Post angeschaut. Es ist ein anderes Problem, weil ich glaube, dass meine Funktion eine "skalarwertige Funktion" sein sollte. – Cloud

+1

* Es scheint, dass die benutzerdefinierte Funktion in der Systemdatenbank erfolgreich erstellt wurde -> master *. Das mag sein, aber es wurde in der Datenbank erstellt, die zu der Zeit unter dem Account des DB-Besitzers (dbo) verwendet wurde. Vielleicht sollten Sie das Konzept von 'use ' verstehen und was '[dbo]' bedeutet, bevor Sie es nur zufällig in Ihr SQL einfügen? –

Antwort

1

Basierend auf den Kommentaren, die ich erhalten habe, wurde das Problem dadurch verursacht, dass der Datenbankname, in dem die Funktion erstellt wird, nicht definiert wurde. Die ersten zwei Zeilen im folgenden Code wurden hinzugefügt, um das Problem zu lösen.

USE [database_name] 
GO 

CREATE FUNCTION [dbo].[maximum_time] 
(
    @TotalLengthofRecords REAL 
) 
RETURNS FLOAT 
AS 
BEGIN 
    RETURN 
     CASE 
      WHEN @TotalLengthofRecords > 3600 THEN 3600 
      ELSE @TotalLengthofRecords 
     END 
END 
+0

Sie können auch eine Standarddatenbank für den aktuellen Benutzer festlegen, um dies zu vermeiden. – berthos

+0

@berthos Benutzerdefinierte Funktion in der Master-Datenbank kann nicht direkt referenziert werden. –

-1
 SELECT 
A.*, 
Master.[dbo].[maximum_time]([TotalLengthofRecords_MAX])AS [TotalLengthofRecords_MAX] 
INTO [dbo].[BunkerAISFinal_V7] 
FROM [dbo].[BunkerAISFinal_V6] AS A; 

1. Um ein Objekt der Benutzer Referenz dieses

[Servername/serverip]. [Database]. [Schema]. [ObjektName] folgen müssen.

Für verschiedene Server muss ein Verbindungsserver verwendet werden.

2. Wenn der Server für die Objekte, auf die verwiesen wird, identisch sind und sich Objekte in einer anderen Datenbank befinden und ein anderes Schema haben, das Sie verwenden können.

[Database]. [Schema]. [ObjektName]

3 Wenn die Datenbank sind gleich und anderen Schema Verwendung [schema]. [ObjektName]

4 Else

Direkt verweisen das Objekt

Verwandte Themen