SQL 动态SQL语句查询获取数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 动态SQL语句查询获取数据相关的知识,希望对你有一定的参考价值。
例如我动态获取到SQL语句
@SQL='DECLARE @N1 INT
DECLARE @N2 INT
SELECT @N1=1
SELECT @N2=2
SELECT @N1 num1,@N2 num2'
然后我想要的是获取num1和num2这两个值,注不是查询打印出来,是获取,因为后面要用到。
不考虑修改获取SQL语句前的动作,即获取的SQL语句是怎样就怎样
set @SQL='DECLARE @N1 INT DECLARE @N2 INT SELECT @N1=1 SELECT @N2=2 SELECT @N1 num1,@N2 num2' ----获取@SQL
EXECUTE sp_sqlexec @SQL --执行获取的SQL语句追问
这样只是显示出来而已,我得到这两个然后进行其它的处理
我想要的是:
首先定义两个变量
DECLARE @NUM1 INT
DECLARE @NUM2 INT
然后将动态sql语句获取的num1和num2的值赋给@NUM1和@NUM2
declare @SQL nvarchar(1024) ,@num1 int
set @SQL='DECLARE @N1 INT DECLARE @N2 INT SELECT @N1=1 SELECT @N2=2 SELECT @num1=@N1 '
EXEC sp_executesql @SQL ,N'@num1 int output ',@num1 output
select @num1本回答被提问者和网友采纳 参考技术B 看下这个写法对你有没有帮助,有其它问题可以继续问
DECLARE @Sql NVARCHAR(max)
DECLARE @N1 INT
DECLARE @N2 INT
SELECT @SQL='
SELECT @N1=1
SELECT @N2=2
SELECT @N1 num1,@N2 num2'
EXEC sys.sp_executesql @Sql,
N'@N1 INT out,@N2 INT out',
@N1 OUT,@N2 OUT
SELECT @N1,@N2 参考技术C SELECT @N1=num1,@N2 = num2追问
我给出的sql语句是由于字数限制而改的最最优化语,请不用过于考虑,SQL语句最后得出的结果是 SELECT num1,num2
至于你到底想表达什么真真不明白,如果你是想说用sp_executesql的话,那问题就是怎么改sql语句了,可是sql语句在获取前是绝对不能改的,要改也只能是获取后的@SQL,可问题就来了,怎么改?
现在不明白你是想要什么了 想要结果的话执行完语句不就有结果了吗
追问我想要的是:
首先定义两个变量
DECLARE @NUM1 INT
DECLARE @NUM2 INT
然后将动态sql语句获取的num1和num2的值赋给@NUM1和@NUM2
不要问为什么要这样,因为获取这两个值是我要实现真正目的的前提条件。
这样的话 我觉得应该在存储过程中处理
追问.........我就是在写存储过程啊,这是我要写的存储过程的一部分,获取的数据就要用来进行运算的。
追答不是太理解了 在存储过程中定义了变量 把查询语句的结果set给变量不就可以了吗
追问我的目的是:先从表A读出SQL语句(注:这些语句最后都是SELECT num1,num2这种形式),获取sql语句中的值,然后经过一系列的处理,插入或更新到表B中
追答先执行动态语句 返回一个临时表 然后查询临时表把值赋给变量
SQL Select 语句排除数据
【中文标题】SQL Select 语句排除数据【英文标题】:SQL Select statement to exclude data 【发布时间】:2014-03-26 17:18:33 【问题描述】:我正在尝试编写 SQL 查询以在 Configuration Manager 2012 中设置动态集合。我当前的查询是
select * from SMS_R_System where SMS_R_System.Name LIKE 'cmgr%'
这将获取以cmgr
开头的任何服务器名称并将其放入指定的集合中。
我的问题是我需要在此查询中添加另一个语句以排除包含以下条目 qw
、dw
和 tw
的服务器。这将防止我的非生产服务器被放入生产集合中。
我对 SQL 脚本的了解非常有限,因此感谢任何反馈。
【问题讨论】:
哪个字段包含条目'qw'、'dw'、'tw'? Adam,服务器名称为 serverappPW1 或 serverappQW1。它们是整个服务器名称的一部分,这是我们区分生产和非生产的方式... 什么是 Configuration Manager 2012? 配置管理器 2012 是 Microsoft System Center Suite 产品(以前称为 SMS)的一部分。用于软件分发、补丁管理和系统远程管理。 【参考方案1】:你能用这样的东西吗?
select * from SMS_R_System
where SMS_R_System.Name LIKE 'cmgr%'
AND SMS_R_System.Name NOT LIKE '%qw%'
AND SMS_R_System.Name NOT LIKE '%dw%'
AND SMS_R_System.Name NOT LIKE '%tw%'
【讨论】:
Roryap,谢谢。这可能会奏效。将服务器放入 Config Mgr 后,我需要进行测试。我会让你知道...再次感谢 您好,感谢您对此的所有建议。查询一直在工作,但我没有更复杂的查询。我有一个包含多个服务器名称的集合。我可以通过添加 OR 语句来更新我现有的查询。它看起来像这样: select * from SMS_R_System where SMS_R_System.Name LIKE 'acl%' OR SMS_R_System.Name LIKE 'bre%' OR SMS_R_System.Name LIKE 'eps%' OR SMS_R_System.Name LIKE 'hrk%' AND SMS_R_System .Name NOT LIKE '%qw%' AND SMS_R_System.Name NOT LIKE '%dw%' AND SMS_R_System.Name NOT LIKE '%tw%' 现在的问题是 AND 语句未被识别为具有 qw、dw 和tw 正在从查询中返回。关于如何使这一切正常工作的任何想法?顺便说一句,Config Mgr 是 Microsoft System Center Configuration Manager....谢谢【参考方案2】:您可能想看看that previous answer,它谈到了在查询中使用NOT EXISTS
命令。
【讨论】:
以上是关于SQL 动态SQL语句查询获取数据的主要内容,如果未能解决你的问题,请参考以下文章