为什么SQL Server的OBJECT_ID(NVARCHAR)不带变量?

dav*_*ain 3 sql sql-server sql-server-2008

那为什么不起作用呢?

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

当这样做时:

<!-- language: lang-sql -->
    SELECT OBJECT_ID('MyTable')
Run Code Online (Sandbox Code Playgroud)

我需要将变量传递给此函数。

Rem*_*anu 5

是的

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


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

(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)

在您的示例中,声明了一个长度为1的变量(因为省略了length)。OBJECT_ID(N'M')一无所获并返回NULL。

在数据定义或变量声明语句中未指定n时,默认长度为1。在CAST函数中未指定n时,默认长度为30。