2016-09-01 8 views
0

Ich versuche, einen Tabellentyp Parameter namens "ListOfName" zu erstellen, und einen Parameter dieses Typs in meiner Prozedur festlegen. Aber ein Fehler entstanden sind:Definieren Sie einen Tabellentyp Parameter

muss die skalare Variable "@Table_Name_List"

erklären, aber ich erkläre

CREATE TYPE ListOfName AS TABLE (Table_Name nvarchar(50)); 

CREATE PROCEDURE spTest 
    @Table_Name_List ListOfName READONLY 

AS 
    SELECT * from dbo.Table_Size_Daily 

    WHERE Table_NAME IN (@Table_Name_List) 
Go 

Wenn ich eine Erklärung vor der Definition chunk hinzufügen,

DECLARE @Table_Name_List AS ListOfName; 

Der Fehler war:

Der Variablenname '@Table_Name_List' wurde bereits deklariert. Variablennamen müssen innerhalb eines Abfrage-Batches oder einer gespeicherten Prozedur eindeutig sein.

Wie kann ich es beheben? Vielen Dank

+0

'@ Table_Name_List' ist ein Tabellentyp, der in Ihrer' where' – techspider

+0

-Studie nicht übergeben werden kann [dieser Artikel] (https://msdn.microsoft.com/en-us/library/bb675163 (v = vs. 110) .aspx) zur Verwendung von Tabellentypen – techspider

+1

Schnellkorrektur: 'WHERE Table_NAME IN (SELECT Tabellenname FROM @Table_Name_List)' – techspider

Antwort

1

Ich kann sehen, dass es Missverständnisse darüber gibt, was ein Tabellentyp ist. Obwohl Ihr Tabellentyp nur eine Spalte enthält, können Sie dies nicht als einspaltiges Argument behandeln.

Betrachten Sie einen Tabellentyp-Parameter wie jede andere Tabelle unabhängig von Anzahl der Spalten, die Sie haben.

Um das Problem zu beheben, würde ich Ihre WHERE Zustand bevorzugen wie folgt zu ändern:

WHERE Table_NAME IN (SELECT Table_Name FROM @Table_Name_List) 

Allerdings würde ich Ihnen dringend empfehlen, ein paar Tutorials auf Tabellentyp zu lesen, bevor Sie mit fortfahren jede Implementierung. Für Beispiel: This Table Valued Parameters article auf MSDN gibt einen klaren Einblick in es.

Verwandte Themen