首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据库名称从存储过程传递给输入参数

将数据库名称从存储过程传递给输入参数
EN

Database Administration用户
提问于 2020-12-03 08:43:23
回答 2查看 1.4K关注 0票数 0

我对这个申请有一些意见。我知道有很多关于将数据库名称作为输入传递的主题,但是我仍然不知道我的代码的问题是什么。希望你们能帮我!

我几乎没有数据库,每天都会创建一个以XXXXX-YEARMONTHDAY为名称的新数据库.我想要实现的是从我的存储过程中传递一个新的数据库名作为输入参数。

当它写得很硬的时候,它就像一种魅力:

代码语言:javascript
复制
GO
/****** Object:  StoredProcedure [dbo].[WinccToAlarms]    Script Date: 03-12-20 08:26:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[WinccToAlarms]
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    INSERT INTO Reporting.dbo.LiaisonAlarmes
    SELECT * FROM [WIN-9SEBDMDC9O9_HMI#B5N2_ALG_202012020924].dbo.AlgRtTextsFRA
END 

但是我想动态地命名请求的WIN-9 SEBDMDC9O9_HMI#B5N2_阿尔格_202012020924部分。下面是我写的代码:

代码语言:javascript
复制
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE WinToAlarms20
    -- Add the parameters for the stored procedure here
    @NomDBAlarms sysname
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    SET XACT_ABORT ON

    IF DB_ID(@NomDBAlarms) IS NULL
    BEGIN
    RAISERROR('Nom de base de donnée invalide',16,1)
    RETURN
    END


    DECLARE @Sql NvarChar(max)

    -- Insert statements for procedure here
    SET @Sql = N'INSERT INTO Reporting.dbo.LiaisonAlarmes
    SELECT * FROM ['+(@NomDBAlarms)+'].dbo.AlgRtTextsFRA'

    Exec @Sql
    END
GO

你能帮我找出这段代码有什么问题吗?

非常感谢!

EN

回答 2

Database Administration用户

发布于 2020-12-03 10:31:38

好的。这件事解决了。我必须输入值WIN-9 SEBDMDC9O9_HMI#B5N2_阿尔格_202012020924作为输入参数,而不是输入WIN-9SEBDMDC9O9_HMI#B5N2_ALG_202012020924

也适用于任何想要最终代码和工作代码的人;这就是!

代码语言:javascript
复制
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE WinToAlarms22
    -- Add the parameters for the stored procedure here
    @NomDBAlarms sysname
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    SET XACT_ABORT ON

    IF DB_ID(@NomDBAlarms) IS NULL
    BEGIN
    RAISERROR('Nom de base de donnée invalide',16,1)
    RETURN
    END


    DECLARE @Sql NvarChar(max)

    -- Insert statements for procedure here
    SET @Sql = N'INSERT INTO Reporting.dbo.LiaisonAlarmes
    SELECT * FROM ['+@NomDBAlarms+'].dbo.AlgRtTextsFRA'

    Exec sp_executesql @Sql
    END
GO

感谢您的支持,祝您今天愉快!

票数 1
EN

Database Administration用户

发布于 2020-12-03 10:02:29

我不知道您的错误消息,但是尝试用Exec @Sql替换Exec sp_executesql @Sql

票数 -1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/280808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档