我想从 DatabaseOne 中删除一些表,如果它们被标记为放入 LookupTable 。
LookupTable 在设计中类似于以下内容:
TableName DropTable
=========================================
TableA Y
TableB Y
TableC N
TableD Y
因此,在此示例中,除TableC之外的所有内容都将被删除。
答案 0 :(得分:1)
您可以尝试这样
declare @sql nvarchar(max) = ''
SELECT @SQL += N'DROP TABLE [' + name + '];'
FROM LookUpTable
WHERE DropTable = 'Y'
ORDER BY TableName
select @sql
exec sp_executesql @sql
答案 1 :(得分:0)
这样的事情应该有效:
declare @SQL nvarchar(2000)
declare CRS_TABLE cursor fast_forward for
SELECT N'DROP TABLE [' + TableName + '];'
FROM LookupTable
WHERE DropTable = 'Y'
ORDER BY TableName
open CRS_TABLE
fetch next from CRS_TABLE into @SQL
while @@FETCH_STATUS = 0
begin
print @SQL
EXECUTE sp_executeSQL @SQL
fetch next from CRS_TABLE into @SQL
end
close CRS_TABLE
deallocate CRS_TABLE
如果您对这些表格有限制,则需要先删除这些表格。
答案 2 :(得分:0)
尝试以下
DECLARE @SQL NVARCHAR(MAX)
SET @SQL=(SELECT DISTINCT ( Stuff((SELECT '; DROP TABLE ' + [TABLENAME]
FROM #TABLE1
WHERE DROPTABLE = 'Y'
FOR XML PATH(''), TYPE) .value('.', 'NVARCHAR(MAX)'), 1, 2, ' ') ) LIST_OUTPUT
FROM #TABLE1)
EXEC(@SQL)
答案 3 :(得分:0)
似乎需要使用动态查询,
CREATE TABLE #LookUpTable
(
TableName VARCHAR(10),
DropTable VARCHAR(1)
)
INSERT INTO #LookUpTable
SELECT 'TableA',
'Y'
INSERT INTO #LookUpTable
SELECT 'TableB',
'Y'
INSERT INTO #LookUpTable
SELECT 'TableC',
'N'
INSERT INTO #LookUpTable
SELECT 'TableD',
'Y'
DECLARE @sql NVARCHAR(MAX) = ''
SELECT @SQL += N'DROP TABLE [' + TableName + '] GO '
FROM #LookUpTable
WHERE DropTable = 'Y'
ORDER BY
TableName
PRINT @sql
EXECUTE sp_executeSQL @sql
DROP TABLE #LookUpTable