Ich habe eine Anforderung zum Erstellen einer Sicht in SQL 2012, das Skript läuft in SSMS als Standalone, muss aber in eine Ansicht konvertieren, jedoch verwendet das Skript eine CLR zu generieren Schlüsseldaten. Bis jetzt haben wir das CLR-Ergebnis in eine temporäre Tabelle gebracht und von dort aus hinzugefügt. Da temporäre Tabellen in einer Ansicht nicht zulässig sind, verwenden wir stattdessen eine Variable für die Tabelle, die jedoch einen Fehler um den Deklarationsteil verursacht. Wir haben offensichtlich versucht, es als ein gespeichertes Proc auszuführen, aber das kann nicht aus einer Sicht aufgerufen werden ... Irgendwelche Vorschläge würden geschätzt werden.Kann nicht verwenden, deklarieren oder temporäre Tabelle in SQL-Ansicht, Vorschläge bitte
Dies ist der Arbeitscode
declare @idList IdList
INSERT INTO @idList SELECT distinct RT_ID FROM [RT]
DECLARE @CLRs TABLE (
RT_ID nvarchar(19)
,rowindex nvarchar(20)
,Exp1 nvarchar(20)
,Exp2 nvarchar(20) )
INSERT INTO @CLRs
SELECT [IDLIST].[id] as RT_ID
,AD.ROWINDEX
,dbo.fnPropercase(Contact) as Exp1
,dbo.fnPropercase(Contact2) as Exp2
from @idList [IDLIST]
LEFT OUTER JOIN [CLR DETAILS](@idList,1) [AD] on [IDLIST].[id] = [AD].RT_ID
INNER JOIN CONTACTS CS on CS.CONTACTS_ID= AD.RT_CONT_ID
SELECT * FROM @CLRs
Offensichtlich ist dies ein vereinfachtes Skript ist aber die Absicht ist es noch
Thankyou zu sehen.
Etwas scheint hier weg. Was genau macht der SQLCLR TVF? Ist es wirklich SQLCLR? Es sieht so aus, als ob '@ idList' ein benutzerdefinierter Tabellentyp ist, aber Sie können diese nicht an SQLCLR-Objekte übergeben. Ist die obige Abfrage wirklich der Arbeitscode, oder wurde sie für den Zweck der Veröffentlichung auf einer öffentlichen Website geändert? Wie dem auch sei, ist dies ein sehr verwirrender Code, insbesondere weil die meisten Objekt- und Feldnamen bedeutungslos sind. Und gibt es wirklich einen Platz im Objektnamen '[CLR DETAILS]'? Wenn dies der Fall ist, sollten Sie in Betracht ziehen, dies zu entfernen, da es viel einfacher ist, mit ihm zu arbeiten, wenn kein Platz ist. –