gpt4 book ai didi

sql - 为什么包含所有者的系统存储过程会失败?

转载 作者:行者123 更新时间:2023-12-04 07:03:45 24 4
gpt4 key购买 nike

在 SQL Server 中,以下工作:

sp_help MyProc
sp_depends MyTable

但是,如果您包含所有者,则会失败并出现语法错误:
sp_help dbo.MyProc
sp_depends dbo.MyTable

它使您将参数放在引号中以使其工作。但是,我可以毫无问题地执行以下操作:
exec dbo.MyProc

为什么不一致?有原因吗?

最佳答案

SQL Server允许您省略单字字符串参数的单引号:

这将输出 test :

CREATE PROCEDURE prc_test (@objname NVARCHAR(255))
AS
BEGIN
SELECT @objname
END

prc_test test

,但是这将失败:
prc_Test Cannot_insert_a_dot.here

在这里, test'test' 的缩写形式(注意单引号)。
SP_HELP是一个需要 VARCHAR 的存储过程参数,而 EXECUTE需要一个对象标识符(其中一个数据库名称是有效的部分)
exec dbo.MyProc

始终将字符串常量括在单引号中,将对象名称括在方括号中可能是个好主意:
EXEC [dbo].[myproc]

关于sql - 为什么包含所有者的系统存储过程会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1422178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com