gpt4 book ai didi

SQL:如何使存储过程中的表名动态化

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

我是 SQL Server 的新手,希望这里有人可以帮助我(我使用的是 QL Server 2008)。

以下是一个按预期工作的小程序。

现在我想使用相同的过程来更新多个表,因为所有这些表都具有完全相同的列名和列格式,唯一的区别是我添加的表名的第二部分 XXX 下面。

有人可以告诉我如何将其动态化并提供一些解释吗?我不能在这里提供更多信息,因为我不确定如何处理这个问题——除了可能声明 @sql nvarchar(max) 并将整个查询包装在 SET @sql = N' 之外...' 在执行之前。

我的存储过程:

    CREATE PROCEDURE [dbo].[Cal_UpdateTeam]
@team nvarchar(100),
@teamID int,
@notes nvarchar(1000),
@log nvarchar(100),
@admin varchar(50)
AS
BEGIN
SET NOCOUNT ON;

BEGIN

IF NOT EXISTS
(
SELECT *
FROM Cal_XXX
WHERE teamID = @teamID
)
INSERT INTO Cal_XXX
(
team,
teamID,
notes,
log,
admin
)
SELECT @team,
@teamID,
@notes,
@log,
@admin
ELSE
UPDATE Cal_XXX
SET team = @team,
teamID = @teamID,
notes = @notes,
log = @log,
admin = @admin
WHERE teamID = @teamID

END
END

非常感谢 Mike 提供的任何提示和建议。

最佳答案

您应该将 sql 查询包装在 nvarchar 中,然后按照以下示例执行该查询:

    declare @sql nvarchar(max)
declare @TableName nvarchar(max)
set @TableName = 'mytable'
set @sql = 'Select * from ' + @TableName
Exec sp_executesql @sql

关于SQL:如何使存储过程中的表名动态化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25340658/

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