sql - 重复使用相同的查询,但只更新嵌套变量的值
问题描述
在 T-SQL 中,如果我想重用相同的查询,但只是更新嵌套变量的值,我该如何实现呢?我已经尝试了下面的两个示例,但是,它们都返回了一个空值,而不是产生一个 ID 。
我目前正在编写一个脚本来填充一个显着减小大小的数据库,该数据库包含原始数据库所具有的所有相同表,并且完全由用于测试目的的模拟数据组成。话虽如此,我需要从各种类型的表中获取 ID,以及从需要相互链接的其他表中获取的各种其他数据。为了做到这一点,如果我可以通过将新值传递给嵌套变量来重用相同的查询,那就太好了。
理想情况下,我很想编写一个函数,我可以在其中调用该函数并为参数传递不同的值。有什么办法可以做到这一点吗?
注意:我使用的是 Microsoft SQL Server
第一的:
DECLARE @var1 varchar(20);
DECLARE @queryTable int = (SELECT ID FROM dbo.Table WHERE [Name]=@var1);
SET @var1 = 'CellPhone';
SELECT @queryTable;
SET @var1 = 'HomePhone';
SELECT @queryTable;
第二:
DECLARE @var1 varchar(20);
DECLARE @queryTable int = (SELECT ID FROM dbo.Table WHERE [Name]=@var1);
SET @var1 = 'CellPhone';
DECLARE @queryTable_CellPhone INT = (SELECT (@queryTable));
SET @var1 = 'HomePhone';
DECLARE @queryTable_HomePhone INT = (SELECT (@queryTable));
SELECT @queryTable_CellPhone;
SELECT @queryTable_HomePhone;
解决方案
一种方法是使用sp_executesql
和输出变量:
DECLARE @sql NVARCHAR(MAX)=
N'SELECT @query_table = ID FROM dbo.Table WHERE [Name]=@var1';
DECLARE @query_table INT, @va1 VARCHAR(100);
SET @var1 = 'CellPhone';
EXEC sp_executesql @sql,N'@query_table INT OUTPUT, @var1 VARCHAR(100)',
@query_table OUT, @var1;
SELECT @query_table;
SET @var1 = 'HomePhone';
EXEC sp_executesql @sql,N'@query_table INT OUTPUT, @var1 VARCHAR(100)',
@query_table OUT, @var1;
SELECT @query_table;
并且不拦截结果:
DECLARE @sql NVARCHAR(MAX)= N'SELECT ID FROM dbo.Tab WHERE [Name]=@var1';
DECLARE @var1 VARCHAR(100);
SET @var1 = 'CellPhone';
EXEC sp_executesql @sql, N'@var1 VARCHAR(100)', @var1;
SET @var1 = 'HomePhone';
EXEC sp_executesql @sql, N'@var1 VARCHAR(100)', @var1;
推荐阅读
- c# - 拖拽操作的Unity事件
- c++ - MFC - 通过单击按钮更改鼠标光标
- flutter - id 整数,自增,数据库中 PRIMARY KEY 为空
- c# - 语音识别循环
- c++ - 在无序映射中增加默认构造的 int
- javascript - 为什么它不显示添加的列表项?单引号有问题
- angular - Angular Material - 目标列表中预览的 CdkDrag 索引
- wordpress - 单击添加到购物车按钮时使用 javascript 添加自定义产品数据
- css - 如何在Vuetify中轻松将扩展面板标题中的图标向右移动?
- alexa - Alexa 技能无法避免 FallbackIntent