Так почему же это не работает?
<!-- language: lang-sql --> DECLARE @tn NVARCHAR SET @tn = 'MyTable' SELECT OBJECT_ID(@tn)
Когда это происходит:
<!-- language: lang-sql --> SELECT OBJECT_ID('MyTable')
Мне нужно передать переменную в эту функцию.
Да.
declare @name sysname = N'sys.objects'; select object_id(@name); ----------- -385 (1 row(s) affected)
В вашем примере вы объявляете переменную длины 1 (так как вы опускаете длину ). OBJECT_ID(N'M') ничего не находит и возвращает NULL.
OBJECT_ID(N'M')
Когда n не указано в определении данных или объявлении переменной оператора, длина по умолчанию равна 1. Когда n не указано с Функция CAST, длина по умолчанию составляет 30.
Ваша проблема в том, что вам не хватает размера на NVARCHAR.
NVARCHAR
Это работает:
DECLARE @tn NVARCHAR(20) SET @tn = 'MyTable' SELECT OBJECT_ID(@tn)