【问题标题】:Issue creating Stored Procedure创建存储过程的问题
【发布时间】:2018-01-11 03:19:37
【问题描述】:

我在 SQL Server 中创建存储过程时遇到问题;我有什么遗漏/做错了吗?

我已经添加了创建数据库和创建过程的查询,非常感谢您的帮助和指导。

如果您需要更多详细信息,请告诉我!

存储过程(麻烦)

USE [ChartSample]  
GO  

SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  

ALTER PROCEDURE [dbo].[SC_GetPlayers]  
AS  
BEGIN  
    SELECT  *  
    FROM CS_Player   
END  

USE [ChartSample]  
GO  

SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  

ALTER PROCEDURE [dbo].[SC_GetPlayerRecordsBtPlayerId] 
    @PlayerId INT  
AS  
BEGIN  
    SELECT  
        PlayerId, 
        Year,  
        TotalRun, TotalWickets,  
        ODIMatches, TestMatches  
    FROM    
        CS_PlayerRecord  
    WHERE   
        PlayerId = @PlayerId  
END 

错误信息:

消息 154,级别 15,状态 1,过程 SC_GetPlayers,第 8 行 [批处理开始第 7 行]
过程、函数或触发器中不允许使用 USE 数据库语句。

消息 208,级别 16,状态 6,过程 SC_GetPlayerRecordsBtPlayerId,第 1 行 [批处理开始第 21 行]
无效的对象名称“dbo.SC_GetPlayerRecordsBtPlayerId”。

查询创建小型数据库:

CREATE DATABASE ChartSample  

USE [ChartSample]  
GO  

SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  
SET ANSI_PADDING ON  
GO  

CREATE TABLE [dbo].[CS_Player]
(  
    [PlayerId] [int] IDENTITY(1,1) NOT NULL,  
    [PlayerName] [varchar](50) NULL,  

    CONSTRAINT [PK_CS_Player] 
        PRIMARY KEY CLUSTERED ([PlayerId] ASC)
) ON [PRIMARY]  
GO  

SET ANSI_PADDING OFF  
GO  

SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  

CREATE TABLE [dbo].[CS_PlayerRecord]
(  
    [ID] [int] IDENTITY(1,1) NOT NULL,  
    [PlayerId] [int] NULL,  
    [Year] [int] NULL,  
    [TotalRun] [int] NULL,  
    [TotalWickets] [int] NULL,  
    [ODIMatches] [int] NULL,  
    [TestMatches] [int] NULL,  

    CONSTRAINT [PK_CS_PlayerRecord] 
        PRIMARY KEY CLUSTERED ([ID] ASC)
) ON [PRIMARY]  
GO  

ALTER TABLE [dbo].[CS_layerRecord]  WITH CHECK 
    ADD CONSTRAINT [FK_CS_PlayerRecord_CS_Player] 
        FOREIGN KEY([PlayerId]) REFERENCES [dbo].[CS_Player]([PlayerId])  
GO  

ALTER TABLE [dbo].[CS_PlayerRecord] CHECK CONSTRAINT [FK_CS_PlayerRecord_CS_Player]  
GO 

【问题讨论】:

  • 您遇到了什么问题?
  • 你认为它有什么问题?你在问什么?
  • 您好,感谢您的回复,我收到此错误(错误已添加到问题中)

标签: sql-server stored-procedures


【解决方案1】:

尝试在两个过程之间使用GO,否则它将被视为SC_GetPlayers 过程代码的一部分。使用GO 将有助于编译器理解它是批处理的结束

编辑:似乎您正在尝试创建 procs,因此请使用 Create 而不是 Alter

Create PROC [dbo].[SC_GetPlayers]  
AS  
    BEGIN  
        SELECT  *  
        FROM    CS_Player   
    END  

GO--here

USE [ChartSample]  
GO  
SET ANSI_NULLS ON  
GO  
SET QUOTED_IDENTIFIER ON  
GO  
Create PROC [dbo].[SC_GetPlayerRecordsBtPlayerId] @PlayerId INT  
..

【讨论】:

  • 对不起,没有帮助,我仍然得到同样的错误
  • 此处,消息 208,级别 16,状态 6,过程 SC_GetPlayers,第 1 行 [批处理开始第 7 行] 对象名称“dbo.SC_GetPlayers”无效。消息 208,级别 16,状态 6,过程 SC_GetPlayerRecordsBtPlayerId,第 1 行 [Batch Start Line 22] 无效的对象名称“dbo.SC_GetPlayerRecordsBtPlayerId”。
  • @zufuzoje - 您需要使用create 而不是alter.. 检查更新后的查询
【解决方案2】:

在您的第二个 USE 语句之前添加 GO

另外,就像旁注一样,您可能想拼写您的第二个存储过程: GetPlayerRecordsByPlayerID

【讨论】:

  • 对不起,没有帮助,我仍然得到同样的错误
猜你喜欢
  • 2018-05-22
  • 2016-10-06
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多