当前位置: 首页 > 面试题库 >

如何在sql中定义变量而不是表名?

鲜于凯歌
2023-03-14
问题内容

我有这个SQL查询:

delete from Main.dbo.ACTIVITY;
insert into Main.dbo.ACTIVITY
select * from MainTemp.dbo.ACTIVITY;

我想在执行完之后在10个表中执行该SQL ACTIVITY

有什么办法吗?定义变量或其他内容?

我正在SQL Server Management Studio 10(= SQL Server 2008)中运行查询


问题答案:

使用动态SQL

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具有优缺点,有关详细讨论,请参见《动态SQL的诅咒与祝福》。

使用SQLCMD执行模式

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执行模式。



 类似资料:
  • 问题内容: 在我的 Dockerfile中 ,我想 定义 稍后 可以 在Dockerfile中使用的变量 。 我知道该指令,但是我不希望这些变量是环境变量。 有没有一种方法可以 在Dockerfile范围内声明变量 ? 问题答案: 您可以使用-请参阅https://docs.docker.com/engine/reference/builder/#arg 该指令定义了一个变量,用户可以在构建时使用

  • 有没有一种方法可以在Dockerfile范围声明变量?

  • 问题内容: 我想绑定变量,而不只是构建SQL字符串。无论如何要在PHP中执行此操作? MySQL或PostgreSQL答案都会有所帮助。 谢谢 问题答案: 例如有PDO。 有关pdo和预处理语句(包括绑定参数)的介绍,请参见http://docs.php.net/pdo.prepared- statements

  • 问题内容: 在Coffeescript.org上: 将编译为: 通过在node.js下的coffee-script进行编译可以做到: 文件说: 如果要创建供其他脚本使用的顶级变量,请将它们作为属性附加到窗口或CommonJS中的exports对象上。如果您同时针对CommonJS和浏览器,那么存在运算符(见下文)为您提供了一种可靠的方法来确定将它们添加到何处:root = exports?这个 然

  • 问题内容: 如何在JavaScript或jQuery中访问PHP变量?我要写吗 我知道我可以在cookie中存储一些变量,并通过cookie访问这些值,但是cookie中的值是相对稳定的值。而且,有一个限制,您不能在cookie中存储许多值,并且该方法不是很方便。有更好的方法吗? 问题答案: 您的示例展示了将PHP变量传递给JavaScript的最简单方法。您还可以将json_encode用于数组