我有这个SQL查询:
delete from Main.dbo.ACTIVITY; insert into Main.dbo.ACTIVITY select * from MainTemp.dbo.ACTIVITY;
我想在执行完之后在10个表中执行该SQL ACTIVITY。
ACTIVITY
有什么办法吗?定义变量或其他内容?
我正在SQL Server Management Studio 10(= SQL Server 2008)中运行查询
declare @tablename sysname = N'ACTIVITY'; declare @sql nvarchar(max); set @sql = N'delete from Main.dbo.' + quotename(@tablename); exec sp_executesql @sql; set @sql = N'insert into Main.dbo.' + quotename(@tablename); exec sp_executesql @sql; set @sql = N'select * from Main.dbo.' + quotename(@tablename); exec sp_executesql @sql;
这是 非常 使用的重要QUOTENAME处理,因为SQL注入风险的动态SQL时。动态SQL具有优缺点,
SSMS和SQLCMD具有使用客户端变量替换的功能:
:setvar tablename Main.dbo.ACTIVITY delete from $(tablename); insert into $(tablename); select * from $(tablename);
批量使用SQLCMD模式变量时,因为可以通过-v参数传递这些变量。例如:
c:\>for /f %i in (tablenames.txt) do sqlcmd -S <servername> -E -d <dbname> -v tablename=%i -Q "truncate table $(tablename)"
请注意,在SSMS中,必须显式启用SQLCMD执行模式。