Sql server IsNull ExecuteSql语法错误

Sql server IsNull ExecuteSql语法错误,sql-server,Sql Server,我试图找出如何解决以下代码行的“ExecuteSql附近的语法错误”错误: IsNull (ExecuteSql ('Numeric' , SELECT 1 FROM sys.tables a INNER JOIN sys.indexes b ON a.object_id = b.object_id WHERE b.is_primary_key = 1 AND a.name = @@ObjectName AND a.schema_id = SCHEMA_ID (@@SchemaName)'),

我试图找出如何解决以下代码行的
“ExecuteSql附近的语法错误”
错误:

IsNull (ExecuteSql ('Numeric' , SELECT 1 FROM sys.tables a
INNER JOIN sys.indexes b ON a.object_id = b.object_id WHERE b.is_primary_key = 1 AND a.name = @@ObjectName AND a.schema_id = SCHEMA_ID (@@SchemaName)'), 0)  
我不知所措

我想我理解,如果它找到null,它将返回0,但是以IsNull开头的行让我感到困惑

另外,字母
a
b
a.object
b.object
b.object是我还不明白的主要字母

我想没有人能带我走过这里发生的一切

我甚至找不到@所指的内容

ExecuteSQL()接受两个参数,这两个参数都必须是字符串。您的第二个字符串没有开头

尝试此操作,并将缺少的
添加回?(注意:我没有检查关于您的查询的任何其他内容)


在字母等方面,它们是标准的SQL语法

短语
sys.tables a
表示您正在使用表
sys.tables
,但从现在起要将其别名为
a
。这就是为什么稍后会看到
a.name

这同样适用于
sys.indexes b
,为表
sys.indexes
创建别名
b

我会考虑这种不良做法。这与在另一种语言中使用变量
a
b
是一样的。在我看来,最好使用有意义的别名/变量名。但这并不能缩短代码


对于
@
部分,在msdn博客上解释了系统变量



然后,ExecuteSQL()函数执行第二个参数中的代码,但只获取第一列的第一个值,并将其作为ExecuteSQL()的第一个参数中的类型返回。由于它总是返回一个值,因此可能返回NULL
ISNULL(ExecuteSQL(),0)
将任何空返回值替换为0。

这看起来没有意义,您是否阅读了
ISNULL
上的MSDN。您需要
ISNULL(Column,Value)
即ISNULL检查列或聚合是否为null或返回null,而不是完整的
EXECUTESQL
表达式。@JonH-我对EXECUTESQL()函数的理解是,它返回指定查询返回的第一行的第一个字段中的值?ISNULL()应该可以工作吗?@Dems-这是非常正确的,我看了之后认为-我不太使用
executesql
,这是可行的..meh+1:)。请投票人给出一个原因,以便OP可以解决它???
SELECT
  IsNull(
    ExecuteSql(
     'Numeric',
     'SELECT 1 FROM sys.tables a
      INNER JOIN sys.indexes b ON a.object_id = b.object_id 
      WHERE b.is_primary_key = 1 
      AND a.name = @@ObjectName 
      AND a.schema_id = SCHEMA_ID (@@SchemaName)'
    )
    , 0
  ) 
@@ObjectName - corresponds to the name field in sys.objects.
               The variable will be replaced with the name of the current object.

@@SchemaName - corresponds to the name field in sys.schemas.
               The variable will be replaced with the schema for the current
               object if the current object belongs to a schema.