如何在SQL Server中将参数值传递给OBJECTID?

axkjgtzd  于 2022-11-28  发布在  SQL Server
关注(0)|答案(2)|浏览(154)

我正在写一个以DB名称作为输入参数的存储过程。我正在动态地创建一些物理表。如果表已经存在,那么我需要删除该表。

DECLARE @TargetDBName NVARCHAR(100) = 'PRD_Inventory'
DECLARE @TargetSchema NVARCHAR(100) = 'usr'

当前查询

IF OBJECT_ID('TempUserData') IS NOT NULL DROP TABLE TempUserData

预期格式:

IF OBJECT_ID('@TargetDBName.@TargetSchema.TempUserData') IS NOT NULL DROP TABLE @TargetDBName.@TargetSchema.TempUserData
798qvoo8

798qvoo81#

为此,您需要动态构建SQL。另请注意,在定义引用对象名的变量时,您应该使用 sysname 类型。
以下代码可以在当前支持的SQL Server上运行,当然也可以在SQL Server 2008上运行,但未经测试。

declare @TargetDBName sysname = 'PRD_Inventory',
        @TargetSchema sysname = 'usr', 
        @sql nvarchar(max);

set @sql = 'if exists (
  select * from ' + QuoteName(@TargetDBName) + '.sys.objects o
  join ' + QuoteName(@TargetDBName) + '.sys.schemas s on s.schema_id = o.schema_id
  where o.name = ''TempUserData'' and s.name = ''' + @TargetSchema + '''
) drop table '+ QuoteName(@TargetDBName) + '.' + QuoteName(@TargetSchema) + '.TempUserData;'

exec (@sql);
vltsax25

vltsax252#

它可能正在起作用:

DECLARE @TargetDBName NVARCHAR(100) = 'PRD_Inventory'
DECLARE @TargetSchema NVARCHAR(100) = 'usr'
DECLARE @TableName NVARCHAR(100) = 'tablename'
DECLARE @TableNameWithShema NVARCHAR(250) = @TargetDBName +'.'+@TargetSchema+'.'+@TableName ;

IF OBJECT_ID(@TableNameWithShema) IS NOT NULL DROP TABLE @TableNameWithShema

相关问题