Почему SQL Server OBJECT_ID (NVARCHAR) не принимает переменную? - PullRequest
3 голосов
/ 10 ноября 2011

Так почему же это не работает?

<!-- language: lang-sql -->
    DECLARE @tn NVARCHAR
    SET @tn = 'MyTable'
    SELECT OBJECT_ID(@tn)

Когда это происходит:

<!-- language: lang-sql -->
    SELECT OBJECT_ID('MyTable')

Мне нужно передать переменную в эту функцию.

Ответы [ 2 ]

4 голосов
/ 10 ноября 2011

Да.

declare @name sysname = N'sys.objects';
select object_id(@name);


-----------
-385

(1 row(s) affected)

В вашем примере вы объявляете переменную длины 1 (так как вы опускаете длину ). OBJECT_ID(N'M') ничего не находит и возвращает NULL.

Когда n не указано в определении данных или объявлении переменной оператора, длина по умолчанию равна 1. Когда n не указано с Функция CAST, длина по умолчанию составляет 30.

2 голосов
/ 10 ноября 2011

Ваша проблема в том, что вам не хватает размера на NVARCHAR.

Это работает:

DECLARE @tn NVARCHAR(20)
SET @tn = 'MyTable'
SELECT OBJECT_ID(@tn)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...