2017-02-15 101 views
0

我一直在寻找如何执行我已经存储在具有SELECT语句的结果表的发言时间。执行SELECT-导致语句

我也发现了类似的问题,但他们没有工作。

所以现在我有一个表,其中第一列的单元格中包含

DROP TABLE table1 
DROP TABLE table2 
..... and so on. 

我使用EXEC命令试过,但我不能使它发挥作用。

请帮忙。谢谢。

+1

你为什么会想这样做,所有的报表?似乎是一个糟糕的主意。 –

+0

我读到它的安全性不好,但它不会被重用。我只需要从具有某种特征的数据库中删除表。 – couchPotato

回答

1

我认为你需要实现一个光标,如果你想执行

DECLARE @Query VARCHAR(250) 

DECLARE crs_ExecStatement CURSOR FAST_FORWARD 
FOR 
    SELECT Column1 FROM YourTable 

OPEN crs_ExecStatement 
    FETCH NEXT FROM crs_ExecStatement INTO @Query 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     EXEC(@Query) 

     FETCH NEXT FROM crs_ExecStatement INTO @Query 
    END 

CLOSE crs_ExecStatement 
DEALLOCATE crs_ExecStatement 
+0

游标被查杀性能,PLZ跟着我的答案,让另一种解决方案,除光标 –

+0

表中有多少记录在那里,你将如何经常执行这些命令更友好?声明游标为FAST_FORWARD你得到一个稍微好一点的性能 – Kostis

+0

如果您有关于游标和性能之间的关系有任何疑问,简单地说,使用执行计划的两种方法,并让SQL Server引擎说,它的词。 –

0

使用EXEC并用GO如接下来演示分隔值: -

Create database Demo 
go 
use Demo 
go 

Create table MyTable (Value varchar (200)) 
go 
insert into MyTable values ('Drop Table table1') 
go 
insert into MyTable values ('Drop Table table2') 
go 
insert into MyTable values ('Drop Table table3') 
go 

declare @Query nvarchar(max) 
SELECT @Query = isnull(@Query,'') + Value + char (10) + 'Go' 
FROM MyTable 
--print @Query 
SET @Query = 'EXEC (''' + REPLACE(REPLACE(@Query, '''', ''''''), 'GO', '''); EXEC(''') + ''');' 
EXEC (@Query) 

go执行动态查询的想法是从here服用。

+0

谢谢,但它不会删除表格...... – couchPotato

+0

代码已经过测试!,确认您正在使用相同的数据库! –

+0

我刚刚意识到我犯了一个错误 - 我没有在每个值之后使用go,因为我使用select语句在表中插入了值。 – couchPotato