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

时间:2011-11-10 00:03:13

标签: sql sql-server sql-server-2008

那么为什么这不起作用?

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

当这样做时:

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

我需要将一个变量传递给这个函数。

2 个答案:

答案 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)