那么为什么这不起作用?
<!-- language: lang-sql -->
DECLARE @tn NVARCHAR
SET @tn = 'MyTable'
SELECT OBJECT_ID(@tn)
当这样做时:
<!-- language: lang-sql -->
SELECT OBJECT_ID('MyTable')
我需要将一个变量传递给这个函数。
答案 0 :(得分:4)
确实如此。
declare @name sysname = N'sys.objects';
select object_id(@name);
-----------
-385
(1 row(s) affected)
在您的示例中,您声明了一个长度为1的变量(因为您omit the length)。 OBJECT_ID(N'M')
找不到任何内容并返回NULL。
在数据定义或变量声明中未指定n时 声明,默认长度为1.当未指定n时 CAST功能,默认长度为30。
答案 1 :(得分:2)
您的问题是您错过了NVARCHAR
的尺寸。
这有效:
DECLARE @tn NVARCHAR(20)
SET @tn = 'MyTable'
SELECT OBJECT_ID(@tn)