【问题标题】:No IntelliSense in SSMS 2008 for Table Valued FunctionSSMS 2008 中没有用于表值函数的 IntelliSense
【发布时间】:2014-06-21 06:24:19
【问题描述】:

我正在 SSMS 中构建一个表值函数,我希望 IntelliSense 可以帮助我选择列,但它没有。考虑一下:

CREATE FUNCTION dbo.My_TVF
(   
)
RETURNS TABLE
AS
RETURN
(
    SELECT [PO].I -- Here I is my cursor, ctrl+space does nothing
    FROM dbo.SomePurchaseOrderView PO
    JOIN dbo.SomePurchaseOrderLineView POL ON PO.PO_NUM = POL.PO_NUM
    WHERE  PO.PO_NUM IN (
        SELECT TOP 500 PO_NUM 
        FROM dbo.SomeTable 
        WHERE PROCESSED = 0
    )
)
GO

我希望它为 select 子句建议列名。

注意事项:

  • 缓存是新的(CTRL + SHIFT + R
  • IntelliSense 通常工作正常,这是我遇到的唯一不能正常工作的情况。
  • 如果重要的话,我查询的是视图而不是表。

我知道当您编写的内容出现某种语法错误时,它通常会失败,但是当我指定一个列时,我可以很好地执行我的查询。

【问题讨论】:

  • @vote-to-close-er:“除非它们直接涉及主要用于编程的工具”。请。
  • 你这样做了吗? Use DB go ?
  • 自从您的 SSMS 会话连接到此服务器后,您是否刚刚创建了新功能?如果是这样,请注意 SSMS Intellisense 不会选择自您第一次连接到服务器实例以来创建或更改的任何内容。解决此问题的最简单方法是重新启动 SSMS。
  • @861051069712110711711710997114(好东西 this intellisense 有效):不,我没有,我不知道它会有什么不同。所涉及的一切都在同一个数据库中
  • @RBarryYoung 我重启了SSMS,去修改功能,还是不行。无论如何,刷新 IntelliSense 缓存不会做同样的事情吗?

标签: sql sql-server-2008 intellisense ssms


【解决方案1】:

在 msdn 上它说:“当 SELECT 语句由它自己编码时,IntelliSense 可用于 SELECT 语句,但当 SELECT 包含在 CREATE FUNCTION 语句中时不可用。”
虽然,在我的 SSMS 2012 中对其进行测试时,它似乎确实有效......

来源:http://msdn.microsoft.com/en-us/library/bb934481.aspx
(对不起,我没有足够的代表发表评论......)

【讨论】:

  • 好发现,我不知道这是否是的解释。
  • 恕我直言,我认为是。如果您还在寻找解决方法,在 Microsoft 的解释旁边,那么您始终可以首先创建 SELECT 语句(在 CREATE FUNCTION 之外),其中 Intellisense 可用。然后将其放回CREATE FUNCTION 语句中:)
  • 是的,这是一种解决方法。也许他们确实在 2008 年 SSMS 之后改变了这一点。在赏金之后我不会接受你的答案,但除非其他人出现更好的东西,否则你会得到它。
  • 我刚刚发现,当我将鼠标悬停在我的 SQL SELECT 中的任何字段上时,会出现一个显示为 CREATE FUNCTION is not currently supported in Transact-SQL IntelliSense 的工具提示。诡异的!所以你的答案肯定是对的。
【解决方案2】:

我找到了 Pinal Dave 发布的关于 SQL Server Authority 相关智能感知的博客。 这是链接: http://blog.sqlauthority.com/2009/03/31/sql-server-2008-intellisense-does-not-work-enable-intellisense/

按照博客中的以下步骤:

1) Make sure you are connected to SQL Server 2008 Edition. 
2) IntelliSense should be enabled.
    a) From Toolbar
    b) Go to Tools >> Options >> Text Editor >> Transact-SQL >> IntelliSense
3) IntelliSense should be refreshed with the latest changes in database.
    a) Press CTRL+SHIFT+R
    b) Go to Edit >> IntelliSense >> Refresh Local Cache
4) Go to Tools >> Options >> Text Editor >> Transact-SQL >> General >> IntelliSense

【讨论】:

  • 我在我的问题中指定了智能感知在其他地方工作正常,创建 TVF 时正是这种情况。
【解决方案3】:

这里有几个假设:

  1. 您已连接到具有下面查询中列出的表的正确 SQL Server。
  2. 您没有使用索引提示。我在智能感知和索引提示方面遇到了问题。

我能够在我的计算机上重现该问题,看来您需要输入一个逗号,SSMS 才会建议下一列。

CREATE FUNCTION dbo.My_TVF
(   
)
RETURNS TABLE
AS
RETURN
(
    SELECT [PO].I X -- If you press ctrl+space at the location of X it does nothing
                    -- since it has already suggested that column, PO.I (that's my assumption)
                    -- for next columns type a comma after PO.I and press ctrl+space.
                    -- I had no problems getting suggestions for other columns.
    FROM dbo.SomePurchaseOrderVIEW PO
    JOIN dbo.SomePurchaseOrderLineView POL ON PO.PO_NUM = POL.PO_NUM
    WHERE  PO.PO_NUM IN (
        SELECT TOP 500 PO_NUM 
        FROM dbo.SomeTable 
        WHERE PROCESSED = 0
    )
)
GO

【讨论】:

  • OK 对不起,如果 I 让您感到困惑,那只是为了模拟我的光标在那个点。否则我知道它不会工作......
  • PO.I 不是您表上的有效列吗?我认为这是一个有效的列,您没有收到有关表中其他列的建议。那么,输入PO. 并按 ctrl+space 什么都不做?输入逗号然后按 ctrl+space 也不起作用吗?
  • 输入 PO. 并按 ctrl+space 确实没有任何作用。它也不适用于其他列(逗号后)。
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
相关资源
最近更新 更多