2016-09-01 5 views
0

Я просто попытаюсь создать параметр типа таблицы, называемый «ListOfName», и установить параметр такого типа в моей процедуре. Но ошибка понесены:Определить параметр типа таблицы

Необходимо объявить скалярную переменную "@Table_Name_List"

Но я объявляю

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 

Если добавить заявление в куске определения,

DECLARE @Table_Name_List AS ListOfName; 

Ошибка:

Имя переменной '@Table_Name_List' уже объявлено. Имена переменных должны быть уникальными в рамках пакета запросов или сохранены в процедуре .

Как это исправить? Большое спасибо

+0

'@ Table_Name_List' - это тип таблицы, который не является параметром для прохождения в вашем исследовании' where' – techspider

+0

[this article] (https://msdn.microsoft.com/en-us/library/bb675163 (v = vs. 110) .aspx) о том, как использовать типы таблиц – techspider

+1

быстрое исправление: 'WHERE Table_NAME IN (SELECT Table_Name FROM @Table_Name_List)' – techspider

ответ

1

Я вижу, что есть неправильное представление о том, что такое Тип таблицы. Несмотря на то, что в вашем типе таблицы есть только один столбец, вы не можете рассматривать это как аргумент с одним столбцом.

Рассмотрите параметр типа таблицы как любую другую таблицу, независимо от количество столбцов, которое у вас есть.

Для того, чтобы исправить проблему, я бы предпочел ваш WHERE условие, чтобы изменить, как показано ниже:

WHERE Table_NAME IN (SELECT Table_Name FROM @Table_Name_List) 

Однако я настоятельно рекомендую вам прочитать несколько учебников по типу таблицы, прежде чем продолжить любой реализации. Например: This Table Valued Parameters article на MSDN дает четкое представление об этом.

Смежные вопросы