gpt4 book ai didi

sql-server - SQL - 定义一个指向存储过程的变量

转载 作者:行者123 更新时间:2023-12-04 00:53:18 26 4
gpt4 key购买 nike

我有几个查询,如果 proc 存在,则删除它,重新创建它,并为其设置权限,类似于此:

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON
GO

if exists (select *
from dbo.sysobjects
where id = object_id(N'[dbo].[spMyStoredProcedureName]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[spMyStoredProcedureName]
GO

CREATE PROCEDURE [dbo].[spMyStoredProcedureName]
AS

/* more proc stuff */

GRANT EXECUTE ON [dbo].[spMyStoredProcedureName]
TO Some_User_Group

我的问题是:是否有某种方法可以为 [dbo].[spMyStoredProcedureName] 定义一个变量,以便我可以声明一次并引用该变量?我需要以两种方式使用变量 - 一次作为 select 语句中的字符串,其余时间作为对我正在创建/删除的存储过程的引用。

最佳答案

我假设您的目标是将“多个脚本”替换为一个脚本,该脚本可以通过更改保存存储过程名称的变量的值来使用。

如果是这样,您可以尝试动态方法:

Declare @spMyStoredProcedureName nvarchar(255);

--either use a cursor or whatever means to populate the variable.
--for this example I will simply set it

SET @spMyStoredProcedureName = '[dbo].[spMyStoredProcedureName]';

DECLARE @sql nvarchar(max);

SET @sql='
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

if exists (select *
from dbo.sysobjects
where id = object_id(N''@spMyStoredProcedureName'')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure @spMyStoredProcedureName
GO

CREATE PROCEDURE @spMyStoredProcedureName
AS

/* more proc stuff */

GRANT EXECUTE ON @spMyStoredProcedureName
TO Some_User_Group
';

SET @sql = REPLACE(@sql, '@spMyStoredProcedureName', @spMyStoredProcedureName)
EXECUTE(@sql)

请注意,执行此操作时,您需要转义存储过程代码中的所有单引号。另外我不太确定你可以在动态 sql 中使用 GO 命令。否则,您需要为每个存储过程执行两个单独的动态语句。

关于sql-server - SQL - 定义一个指向存储过程的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31928320/

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