【发布时间】:2021-10-14 18:00:45
【问题描述】:
我最近开始研究 TSQL 中的存储过程,我正在使用 SSMS 2018。当我执行我处理的前两个存储过程时,结果仍然显示。
但是,过了一会儿,消息窗口只显示“命令已成功完成”,但不再显示结果。
见下面的代码:
USE ALEX_DB --my database name
GO
IF OBJECT_ID ('dbo.practice', 'P') IS NOT NULL --Identifies if there is an existing procedure
DROP PROCEDURE dbo.practice; --Drops if procedure exists
GO
CREATE PROCEDURE dbo.practice
AS
SELECT
CONVERT(VARCHAR, TSM.TXN_DATE, 1) AS 'Transaction Date',
TCA.FIRST_NAME + ' ' + TCA.LAST_NAME AS 'Customer',
TSM.CUST_ID AS 'Customer ID',
TSM.TXN_NO AS 'Reference No.'
FROM TXN_SALES_MAST AS TSM
INNER JOIN TXN_CUST_ACCT AS TCA ON TCA.CUST_ID = TSM.CUST_ID
EXECUTE dbo.practice
当我自己运行 SELECT 语句时,它没有在存储过程中,它会将结果显示到网格中。但是,当我尝试执行存储过程时,SSMS 不再显示任何结果。
【问题讨论】:
-
CREATE和EXECUTE之间是否有批处理分隔符,或者您是否分批运行它们?如果没有,那么上面将创建一个过程,dbo.practice,它会无限地调用自己。 -
如果你运行了那个确切的脚本,你就创建了一个运行
SELECT的存储过程,然后尝试递归地执行自己。 -
我注意到我在 CREATE 和 EXECUTE 之间没有分隔符。非常感谢您的帮助!
-
另外,养成为数据类型定义长度、比例和精度的习惯。此外,一般不建议使用语法
{Expression} AS 'Alias'。单引号 (') 用于文字字符串;使用它们作为别名,虽然有效,但可能会令人困惑(对于新老用户来说),这是语法工作的唯一地方。例如,ORDER BY 'Customer ID'不会按别名为'Customer ID'的列对数据进行排序。
标签: sql sql-server stored-procedures ssms