【问题标题】:Column name of function in SQL ServerSQL Server 中函数的列名
【发布时间】:2018-06-24 18:53:48
【问题描述】:

我想要表格的列名。

所以我试试这个

select * 
from sys.columns 
where object_id = OBJECT_ID('dbo.fnproduct()')

但这没有显示任何数据..这就是我尝试使用动态 SQL 的原因。

begin
    declare @sql nvarchar(max) = 'select * from sys.columns  
                                  where object_id=OBJECT_ID('''+dbo.fnproduct()+''')'

    print @sql

    exec sp_executesql @sql
end

但我收到此错误:

找不到列“dbo”或用户定义的函数或聚合“dbo.fnproduct”,或者名称不明确。

帮我解决这个问题或建议我替代方法 还有啊..我想在这里传递函数

【问题讨论】:

  • 你使用的是哪个sql server版本
  • 我使用的是 sql server 2014

标签: sql-server function tsql


【解决方案1】:

您可以从系统视图INFORMATION_SCHEMA.COLUMNS获取表的所有列的列表

只需选择

SELECT
    *
    FROM INFORMATION_SCHEMA.COLUMNS
       WHERE TABLE_NAME = 'YouTableName'

注意:

如果您试图从函数中获取列名列表(这是我在查看您的代码时的感受)这是不可能的,因为函数没有列名,除非它是表值函数。在那种情况下使用这个

SELECT *
FROM sys.columns
WHERE object_id=object_id('dbo.YourTVF')

【讨论】:

  • 不要认为包括UDF
  • 哦..所以这意味着它不需要参数。你能解释一下为什么吗?
  • 因为对象名不包含括号()。
【解决方案2】:

试试这个查询:

SELECT c.name [ColumnName] 
FROM sys.columns C
INNER JOIN  sys.objects O ON C.Object_id = O.Object_Id
WHERE O.NAME = 'FunctionName'

【讨论】:

    【解决方案3】:

    你不需要动态sql

    select *
    from   sys.columns
    where  object_id = object_id('fnproduct')
    

    如果需要输入参数,从sys.parameters获取

    【讨论】:

    • 哦..所以这意味着它不需要参数。你能解释一下为什么吗?
    • 我的意思是如果你需要将输入参数显示给你的fnproduct,你可以从sys.paramters得到它
    【解决方案4】:
    SELECT c.name, [type] = t.name, c.max_length, c.[precision], c.scale
      FROM sys.columns AS c
      INNER JOIN sys.types AS t
      ON c.system_type_id = t.system_type_id
      AND c.user_type_id = t.user_type_id
      WHERE c.[object_id] = OBJECT_ID('fnproduct')
    

    【讨论】:

      【解决方案5】:

      你为什么不用INFORMATION_SCHEMA.COLUMNS

      SELECT *
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_NAME = N'SampleTable'
      

      另外,我不知道fnproduct() 返回什么,但您应该指定数据库和表名;

      USE SampleDatabase
      select * 
      from sys.columns 
      where object_id = OBJECT_ID('TableName')
      

      【讨论】:

        猜你喜欢
        • 2018-10-15
        • 1970-01-01
        • 2014-05-05
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 2013-04-30
        • 1970-01-01
        • 2017-10-14
        相关资源
        最近更新 更多