【问题标题】:Trouble accessing with Procedure in SQLFiddle在 SQLFiddle 中使用过程访问时遇到问题
【发布时间】:2023-03-27 07:55:01
【问题描述】:

我正在使用 SQL Server 2008 在 SQLFiddle 中构建一个查询。这个查询是一个选择信息的过程。我不能发布查询本身,但我可以发布围绕过程的语法:

CREATE PROCEDURE BusinessInfo
  @Variable VarChar(10)
AS
BEGIN
  SELECT   Info.*
  FROM     Table Info
  WHERE    Info.PersonKey = @Variable
  ORDER BY Info.LastName
END
GO
EXECUTE BusinessInfo '1'
GO

问题是无论我做什么,只要我把创建过程,它什么都不返回。我什至建立了程序,说 END GO,然后重新编写了整个程序查询,它什么也没有撤回,然后我删除了程序,它撤回了我正在寻找的信息。我做错了什么?

如果您需要一个工作示例,这将适用于 SQLFiddle 中的任何 Schema

CREATE PROCEDURE Sample
AS
BEGIN
SELECT   'Information'
END
GO
EXECUTE Sample
GO

【问题讨论】:

  • 谢谢!有用!同时,我早些时候尝试过,但没有奏效。但是,我还在分号后添加了 GO。为什么会产生如此负面的影响?在这种情况下,GO 究竟会做什么?

标签: sql-server tsql stored-procedures sqlfiddle


【解决方案1】:

可能的解决方案:

1) 改成这个(默认终止符是分号):SqlFiddleDemo

CREATE PROCEDURE Sample
AS
BEGIN
    SELECT   'Information'
END;

EXECUTE Sample

2) 使用第 4 个按钮将查询终止符更改为 GO,您的示例将起作用。

选择 GO 作为终止符后的代码

CREATE PROCEDURE BusinessInfo
  @Variable VarChar(10)
AS
BEGIN
  SELECT   Info.*
  FROM     Table Info
  WHERE    Info.PersonKey = @Variable
  ORDER BY Info.LastName
END
GO

EXECUTE BusinessInfo '1'
GO

基于documentation

那是怎么回事 [ ; ] 每个面板下的按钮?

这个不起眼的小按钮决定了每个面板中的查询在发送到数据库之前如何分解。此按钮会弹出一个下拉列表,其中列出了不同的“查询终止符”。查询终止符用作指示(当出现在行尾时)当前语句已结束的标志。终结符不会被发送到数据库;相反,它只是指示在执行查询之前我应该​​如何解析文本。

通常,您不需要触摸此按钮;此功能的主要价值在于定义存储过程。这是因为通常情况下,在存储过程的主体定义中,您可能希望以分号结束一行(通常是这种情况)。由于我的默认查询终止符也是分号,因此我没有明显的方法可以看到您的存储过程的分号实际上并不是查询的结尾。留下分号终止符,我会将您的过程定义分解为不正确的部分,并且肯定会导致错误。将查询终止符更改为分号以外的内容可以避免此问题。

【讨论】:

  • 谢谢!有用!同时,我早些时候尝试过,但没有奏效。但是,我还在分号后添加了 GO。为什么会产生如此负面的影响?在这种情况下,GO 究竟会做什么?
  • @user3654055 在 GO 和下一个定义/EXEC 之间添加空行
  • 一旦你定义了它,你如何调用这个过程?我在查询面板中输入了CALL procedurename,它说只允许选择语句。
  • @Barmar 好点,坦率地说,我不知道为什么行为发生了变化。我曾经使用 SQLFiddle,但现在我使用的是:dbfiddle.ukdb-fiddle.com
  • 我也是,主要是因为我一直尝试使用 sqlfiddle.com 并且在尝试构建架构时遇到了这些“临时”错误之一。我问了new question,有人回答说这是一个已知的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多