2016-06-06 9 views
0

ich zusammengestellt haben, die Sicht folgend erstellen:eine Ansicht in einer gespeicherten Prozedur erstellen - zu unerwarteten Ergebnissen

CREATE VIEW rm_exporttable 
AS 
    SELECT DISTINCT 
     [Item].ID,[Item].ItemLookupCode, 
     [ItemClassComponent].Detail1,[ItemClassComponent].Detail2, 
     [ItemClassComponent].Detail3,[ItemClass].SubDescription1, 
     [ItemClass].SubDescription2, 
     [Item].Description, 
     ISNULL(CONVERT(varchar(50), [Item].Notes), '') Notes, 
     [Department].Name as DepartmentName, 
     [Department].Code DepartmentCode, 
     [Category].Name as CategoryName, 
     [Category].Code as CategoryCode, 
     [Item].Price, [Item].SalePrice, [Item].Cost, 
     [Tax].Percentage as Tax, [Item].Quantity, 
     [Item].ReplacementCost, 
     ISNULL(CONVERT(varchar(50), [Alias].Alias), '') Alias, 
     [Item].WebItem, 
     CASE 
      WHEN [ItemDynamic].StoreID = 6 
       THEN [ItemDynamic].Price 
       ELSE '' 
     END as GoddardsPrice, 
     CASE 
      WHEN [ItemDynamic].StoreID = 5 
       THEN [ItemDynamic].Price 
       ELSE '' 
     END as GoldingPrice, 
     [Item].LastUpdated 
    FROM 
     Item 
    LEFT JOIN 
     ItemClassComponent ON [Item].ID = [ItemClassComponent].ItemID 
    LEFT JOIN 
     ItemClass ON [ItemClassComponent].ItemClassID = [ItemClass].Id 
    LEFT JOIN 
     Department ON [Department].ID = [Item].DepartmentID 
    LEFT JOIN 
     Category ON [Category].ID = [Item].CategoryID 
    LEFT JOIN 
     Tax ON [Tax].ID = [Item].TaxID 
    LEFT JOIN 
     Alias ON [Alias].ItemId = [Item].ID 
    LEFT JOIN 
     ItemDynamic ON [Item].Id = [ItemDynamic].ItemID 
    LEFT JOIN 
     rm_procedurelastran ON [Item].LastUpdated > rm_procedurelastran.date 
    WHERE 
     [Item].WebItem = 1 
     AND [Item].LastUpdated > [rm_procedurelastran].date 

Dies allein absolut gut zu funktionieren scheint. Jetzt versuche ich es in eine einfache gespeicherte Prozedur wie folgt zu setzen:

Dies scheint jedoch nicht zu funktionieren. Das Verfahren scheint gut zu laufen, aber wenn ich eine einfache select *-Anweisung für die Tabelle, die es den Fehler zurückgibt:

Cannot convert a char value to money. The char value has incorrect syntax.

Es hat sich auch nicht alle Spalten erstellen verwaltet.

Kann mir jemand erklären, was ich falsch mache?

Danke.

+2

Ich verstehe nicht ... * warum * versuchst du, eine Ansicht in einer gespeicherten Prozedur zu erstellen ...? – Siyual

+2

Warum versuchen Sie, eine Ansicht in einer Prozedur zu erstellen? Was passiert, wenn Sie Ihren Prozess ein zweites Mal ausführen? –

+0

Ich bin etwas begrenzt durch eine Software, die eine Prozedur ausführt und dann eine Ansicht exportiert. Also brauche ich die Prozedur, um zuerst die Ansicht zu generieren. – Revokez

Antwort

0

Problem wurde mit '' ersetzt durch '' '' (doppelte Zitate). Die korrekte Prozedur sieht so aus:

CREATE PROCEDURE rmprocedureran1 
AS 
exec('Create View rm_exporttable AS 
SELECT DISTINCT [Item].ID,[Item].ItemLookupCode,[ItemClassComponent].Detail1,[ItemClassComponent].Detail2,[ItemClassComponent].Detail3,[ItemClass].SubDescription1,[ItemClass].SubDescription2,[Item].Description,ISNULL(CONVERT(varchar(50),[Item].Notes),'''') Notes,[Department].Name as DepartmentName,[Department].Code DepartmentCode,[Category].Name as CategoryName,[Category].Code as CategoryCode,[Item].Price,[Item].SalePrice,[Item].Cost,[Tax].Percentage as Tax,[Item].Quantity,[Item].ReplacementCost,ISNULL(CONVERT(varchar(50),[Alias].Alias),'''') Alias,[Item].WebItem,CASE WHEN [ItemDynamic].StoreID = 6 THEN [ItemDynamic].Price ELSE '''' END as GoddardsPrice,CASE WHEN [ItemDynamic].StoreID = 5 THEN [ItemDynamic].Price ELSE '''' END as GoldingPrice From Item 
Left Join ItemClassComponent 
On [Item].ID = [ItemClassComponent].ItemID 
Left Join ItemClass 
On [ItemClassComponent].ItemClassID = [ItemClass].Id 
Left Join Department 
On [Department].ID = [Item].DepartmentID 
Left Join Category 
On [Category].ID = [Item].CategoryID 
Left Join Tax 
On [Tax].ID = [Item].TaxID 
Left Join Alias 
On [Alias].ItemId = [Item].ID 
Left Join ItemDynamic 
on [Item].Id = [ItemDynamic].ItemID 
Left Join rm_procedurelastran 
On [Item].LastUpdated > rm_procedurelastran.date 
Where [Item].WebItem = 1 
And [Item].LastUpdated > [rm_procedurelastran].date') 
GO 
+2

Immer noch definitiv ** NICHT ** eine gute Idee, um eine Ansicht in einer gespeicherten Prozedur zu erstellen ...... –

Verwandte Themen