Sql 使用参数动态删除表
我正在尝试使用参数动态删除该表。我正在编写下面的代码,代码正在成功运行,但没有删除表。有人能帮我一下吗 Insights是此处的数据库名称Sql 使用参数动态删除表,sql,sql-server,Sql,Sql Server,我正在尝试使用参数动态删除该表。我正在编写下面的代码,代码正在成功运行,但没有删除表。有人能帮我一下吗 Insights是此处的数据库名称 DECLARE @DQ VARCHAR( MAX ) Declare @DB varchar(256) SET @db = @Insights SELECT @DQ=' IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''
DECLARE @DQ VARCHAR( MAX )
Declare @DB varchar(256)
SET @db = @Insights
SELECT @DQ='
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'''+ @db + '[tablename]'',N''U''))
DROP TABLE ' + @db + '[tablename]'
EXEC(@DQ)
SELECT @db
问候,,
Ratan如果在INSIGHTS以外的其他数据库中运行此代码,sysobjects查找将无法找到匹配的表名,因此不会删除。Sysobjects保存当前数据库中的对象 尝试调整代码以查看INSIGHTS Sysobjects表,或者确保在INSIGHTS db中运行此代码
看起来您没有正确构造SQL语句。添加PRINT@DQ语句并将结果包含在上面的问题文本中如果在INSIGHTS以外的其他数据库中运行此代码,sysobjects查找将无法找到匹配的表名,因此不会删除。Sysobjects保存当前数据库中的对象 尝试调整代码以查看INSIGHTS Sysobjects表,或者确保在INSIGHTS db中运行此代码
看起来您没有正确构造SQL语句。添加PRINT@DQ语句,并将结果包含在上面的问题文本中似乎缺少数据库对象
SELECT @DQ='
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'''+ @db + '.dbo.[TableName] '',N''U''))
BEGIN DROP TABLE ' + @db + '.dbo.[TableName] END'
似乎缺少数据库对象
SELECT @DQ='
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'''+ @db + '.dbo.[TableName] '',N''U''))
BEGIN DROP TABLE ' + @db + '.dbo.[TableName] END'
你可以这样做:
DECLARE @dq VARCHAR(MAX)
DECLARE @db VARCHAR(256) = 'Databasename'
DECLARE @schema VARCHAR(256) = 'dbo'
DECLARE @tb VARCHAR(256) = 'TableName'
SELECT @dq = '
IF EXISTS (SELECT * FROM ' + @db + '.sys.objects
WHERE object_id = OBJECT_ID(N''' + @db + '.' + @schema + '.' + @tb
+ ''',N''U''))
DROP TABLE ' + @db + '.' + @schema + '.' + @tb
PRINT @dq
EXEC(@dq)
看看我是如何检查对象是否存在的,如果存在,请从'+@db+'.sys.objects中选择*。同样,在drop中,您应该指定模式名,或者如果该表处于默认模式中,则只指定双点。删除表格“++@db+”…[TableName]”您可以像这样做:
DECLARE @dq VARCHAR(MAX)
DECLARE @db VARCHAR(256) = 'Databasename'
DECLARE @schema VARCHAR(256) = 'dbo'
DECLARE @tb VARCHAR(256) = 'TableName'
SELECT @dq = '
IF EXISTS (SELECT * FROM ' + @db + '.sys.objects
WHERE object_id = OBJECT_ID(N''' + @db + '.' + @schema + '.' + @tb
+ ''',N''U''))
DROP TABLE ' + @db + '.' + @schema + '.' + @tb
PRINT @dq
EXEC(@dq)
看看我是如何检查对象是否存在的,如果存在,请从'+@db+'.sys.objects中选择*。同样,在drop中,您应该指定模式名,或者如果该表处于默认模式中,则只指定双点。删除表“++@db++”…[TableName]”试试这个,在sys.objects中的name下查找表名。您可以使用@db,而不是将+@db放在任何地方,这样SQL就可以知道我们首先讨论的是哪个db
DECLARE @DQ VARCHAR( MAX )
Declare @DB varchar(256)
SET @db = @Insights
SELECT @DQ='
USE ' + @db + '
IF EXISTS (SELECT * FROM sys.objects
WHERE name = ''[tablename]'')
DROP TABLE [tablename]'
EXEC(@DQ)
SELECT @db
试试这个,在sys.objects中的name下查找表名。您可以使用@db,而不是将+@db放在任何地方,这样SQL就可以知道我们首先讨论的是哪个db
DECLARE @DQ VARCHAR( MAX )
Declare @DB varchar(256)
SET @db = @Insights
SELECT @DQ='
USE ' + @db + '
IF EXISTS (SELECT * FROM sys.objects
WHERE name = ''[tablename]'')
DROP TABLE [tablename]'
EXEC(@DQ)
SELECT @db
我想您丢失了。在数据库名和表名之间有一个点 试试下面的代码,它可能适合你
DECLARE @DQ VARCHAR( MAX )
Declare @DB varchar(256)
SET @db = @Insights
SELECT @DQ='
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'''+ @db + '[tablename]'',N''U''))
DROP TABLE ' + @db + '.[tablename]'
EXEC(@DQ)
我想您丢失了。在数据库名和表名之间有一个点 试试下面的代码,它可能适合你
DECLARE @DQ VARCHAR( MAX )
Declare @DB varchar(256)
SET @db = @Insights
SELECT @DQ='
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'''+ @db + '[tablename]'',N''U''))
DROP TABLE ' + @db + '.[tablename]'
EXEC(@DQ)
此代码假定所有者是dbo。可能是一个安全的假设,但只是一个警告。此代码假设所有者是dbo。可能是一个安全的假设,但只是一个警告。我在表中维护了数据库名称,即Databasename.Dbo.,我只在表中给出了点。请建议。关于,RatanI在表中维护了数据库名称,即Databasename.Dbo.,我只在表中给出了点。请建议。关于这一点,RatanI建议,如果您必须传入一个表名才能删除,那么该过程可能有问题。如果你还想做这样一件危险的事,我会从阿里先生发布的答案开始。这是迄今为止唯一一个不受sql注入影响的答案。我会考虑添加一个不允许被丢弃的表名来保护您的数据,因为这种类型是非常危险的。快速提示-您总是可以做一些像Prime@ DQ之类的事情,看看到底是怎么回事。如果您必须通过一个表名来删除,那么我建议这个过程有问题。如果你还想做这样一件危险的事,我会从阿里先生发布的答案开始。这是迄今为止唯一一个不受sql注入影响的答案。我会考虑添加一个不允许被丢弃的表名来保护您的数据,因为这种类型是非常危险的。快速提示-您总是可以做一些像Prime@ DQ之类的事情,看看什么是真正的错误。嗨,我得到下面的错误,找不到服务器SysServer中的“数据库数据名”。验证是否指定了正确的服务器名称。如有必要,执行存储过程sp_addlinkedserver将服务器添加到sys.servers。请帮助。@Insights看起来怎么样?它看起来像Databasename.dbo.Hi,我收到以下错误消息:在sys.servers中找不到服务器“Databasename”。验证是否指定了正确的服务器名称。如有必要,执行存储过程sp_addlinkedserver将服务器添加到sys.servers。请帮忙,@Insights看起来怎么样?它看起来像Databasename.dbo。