当前位置:首页 » 编程语言 » sqlserver动态查询
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlserver动态查询

发布时间: 2022-10-17 10:49:23

Ⅰ vb6 动态查询 sqlserver 2008 R2数据库中的数据

看你的字段时间,是前面最小后面最大,假设你时间最大的是出库完成(如果不是,你自己修改下)时间范围限定应该限定最小时间字段和最大时间字段都在范围内,时间差用datediff函数,不过这玩意取整数,如果用小时为单位的话,一小时50分钟也算一小时,所以取分钟为单位
如下(假定最小日期是订单录入,最大日期是出库完成,不是的话自己修改字段名)

SQL = "SELECT * from 表名 where datediff( minute," & Combo1(1).Text & " , " & Combo1(2).Text & " )> " & Text1.Text & "*60 AND 订单录入 >= '" & _
Format(DTPicker1(0).Value, "yyyy-MM-dd") & " 0:0:1' AND 出库完成 <= '" & Format(DTPicker1(1).Value, "yyyy-MM-dd") & " 23:59:59'"

如果不知道哪个字段是最大日期哪个字段是最小日期,那就只能每个字段都加限定条件了
这是两个字段判断,继续and下去,所有字段判断一遍,都不超出范围才算
Dim SQL As String
SQL = "SELECT * from 表名 where datediff( minute," & Combo1(1).Text & " , " & Combo1(2).Text & " )> " & Text1.Text & "*60 AND (订单录入 between '" & _
Format(DTPicker1(0).Value, "yyyy-MM-dd") & "' AND '" & Format(DTPicker1(1).Value, "yyyy-MM-dd") & "') AND (订单审核 between '" & _
Format(DTPicker1(0).Value, "yyyy-MM-dd") & "' AND '" & Format(DTPicker1(1).Value, "yyyy-MM-dd") & "')"

Ⅱ 什么是sqlserver 2005中的动态语句

楼上的说的正确
所谓动态sql语句,就是根据实际情况拼接出的语句
比如有个多条件查询,用户可以选择用名称或者ID来查询:
select * from tableName where id = 100
select * from tableName where name = '张三'
但是我们并不知道用户会用哪个查询条件,这个时候就会用到动态sql
假设@id,@name这两个是取得的用户录入信息

declare @sql varchar(1000)
select @sql = 'select * from tableName where 1=1 '
if @id > 0 --如果用户选择了id
select @sql = @sql + ' id = ' + convert(varchar(5),@id)
if @name > '' --如果用户在名称栏填写了内容
select @sql = @sql + ' name = ''' + @name + ''''
exec(@sql) --执行最终的sql

例子举的可能不是十分贴切,意思楼主能领会就行。

Ⅲ sqlserver关于动态执行sql问题

set @flag3=@flag3+1;
set @temp1=DATEADD(M,1,@temp1);
set @temp3=@temp1;
在你循环中赋值的语句,你是想每次循环赋不同的时间,但是在你用exec调用时,只能传入最后计算好的唯一的值,这样可能就查询不到数据了吧,不然你拼接成字符串吧

Ⅳ sqlserver 存储过程动态SQL查询表 查不到表的时候不报错给提示

你可以在存储过程中获取异常进行处理,就和C#的try{}catch{}一个道理

Ⅳ SQLServer动态exec查询语句,返回查询变量

drop procere tempPro;
go

create procere tempPro
as
declare
@sql nvarchar(200),
@user nvarchar(500),
@tablename nvarchar(100)
begin
set @tablename='t_stars'
set @sql=N'select @userOUT = stars_name from '+@tablename+' where stars_id=''hk1006''';
execute sp_executesql @sql, N'@userOUT varchar(30) output', @userOUT=@user output;
print @user;
end
go

exec tempPro;

Ⅵ sqlserver多表查询,根据动态获取的where条件

Select 字段a from 表1 where ‘获取的值’ like 字段a
union
Select 字段b from 表2 where ‘获取的值’ like 字段b

Ⅶ SqlServer如何生成动态交叉表查询

这里指的交叉表,就是象Access的交叉表查询一样的效果,比如Employees表中City字段代表了城市的名称,TitleOfCourtesy代表称呼,我们希望按照City和TitleOfCourtesy的情况来统计ReportsTo字段的合计数(本统计没有任何实际意义,只是挑选一些记录包含重复内容的字段来说明情况),并显示成以下格式:(TitleOfCourtesy作为行,City作为列) ,�0�2�0�2SUM(CASE�0�2City�0�2WHEN�0�2'Redmond'�0�2THEN�0�2ReportsTo�0�2ELSE�0�2NULL�0�2END)�0�2AS�0�2[Redmond�0�2City] ,�0�2�0�2SUM(CASE�0�2City�0�2WHEN�0�2'Seattle'�0�2THEN�0�2ReportsTo�0�2ELSE�0�2NULL�0�2END)�0�2AS�0�2[Seattle�0�2City]FROM�0�2Employees�0�2GROUP�0�2BY�0�2TitleOfCourtesy 其中利用了CASE语句判断,如果是相应的列,则取需要统计的ReportsTo数值,否则取NULL,然后再合计 其中有两个常见问题说明一下: a、用NULL而不用0是有道理的,假如用0,虽然求和函数SUM可以取到正确的数,但类似COUNT函数(取记录个数),结果就不对了,因为Null不算一条记录,而0要算,同理空字串("")也是这样,总之在这里应该用NULL,这样任何函数都没问题。 b、假如在视图的设计界面保存以上的查询,则会报错“没有输出列”,从而无法保存,其实只要在查询前面加上一段:Create View ViewName AS ...,ViewName是你准备给查询起的名称,...就是我们的查询,然后运行一下,就可以生成视图了,对于其他一些设计器不支持的语法,也可以这样保存。 总体思路其实很简单,首先检索列头信息,形成一个游标,然后遍历游标,将上面查询语句里Case判断的内容用游标里的值替代,形成一条新的Sql查询,然后执行,返回结果,就可以了,以下是我写的一个存储过程,供大家参考:CREATE�0�2procere�0�2CorssTab�0�2 @strTabName�0�2as�0�2varchar(50)�0�2=�0�2'Employees' ,�0�2--此处放表名@strCol�0�2as�0�2varchar(50)�0�2=�0�2'City' ,�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2--表头分组依据字段@strGroup�0�2as�0�2varchar(50)�0�2=�0�2'TitleOfCourtesy',--分组字段@strNumber�0�2as�0�2varchar(50)�0�2=�0�2'ReportsTo' ,�0�2�0�2�0�2�0�2--被统计的字段@strSum�0�2as�0�2varchar(10)�0�2=�0�2'Sum'�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2--运算方式ASDECLARE�0�2@strSql�0�2as�0�2varchar(1000 ),�0�2@strTmpCol�0�2as�0�2varchar(100)EXECUTE�0�2('DECLARE�0�2corss_cursor�0�2CURSOR�0�2FOR�0�2SELECT�0�2DISTINCT�0�2'�0�2+�0�2@strCol�0�2+�0�2'�0�2from�0�2'�0�2+�0�2@strTabName�0�2+�0�2'�0�2for�0�2read�0�2only�0�2')�0�2--生成游标begin�0�2�0�2SET�0�2nocount�0�2ON�0�2�0�2�0�2SET�0�2@strsql�0�2='select�0�2'�0�2+�0�2@strGroup�0�2+�0�2' ,�0�2'�0�2+�0�2@strSum�0�2+�0�2'('�0�2+�0�2@strNumber�0�2+�0�2')�0�2AS�0�2['�0�2+�0�2@strSum�0�2+�0�2'�0�2of�0�2'�0�2+�0�2@strNumber�0�2+�0�2']'�0�2--查询的前半段�0�2�0�2OPEN�0�2corss_cursor�0�2�0�2while�0�2(0=0)�0�2�0�2BEGIN�0�2�0�2�0�2�0�2FETCH�0�2NEXT�0�2FROM�0�2corss_cursor�0�2--遍历游标,将列头信息放入变量@strTmpCol �0�2�0�2�0�2�0�2INTO�0�2@strTmpCol�0�2�0�2�0�2�0�2if�0�2(@@fetch_status<0)�0�2break�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2SET�0�2@strsql�0�2=�0�2@strsql�0�2+�0�2' ,�0�2'�0�2+�0�2@strSum�0�2+�0�2'(CASE�0�2'�0�2+�0�2@strCol�0�2+�0�2'�0�2WHEN�0�2'''�0�2+�0�2@strTmpCol�0�2+�0�2'''�0�2THEN�0�2'�0�2+�0�2@strNumber�0�2+�0�2'�0�2ELSE�0�2Null�0�2END)�0�2AS�0�2['�0�2+�0�2@strTmpCol�0�2+�0�2'�0�2'�0�2+�0�2@strCol�0�2+�0�2']'�0�2--构造查询�0�2�0�2END�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2SET�0�2@strsql�0�2=�0�2@strsql�0�2+�0�2'�0�2from�0�2'�0�2+�0�2@strTabname�0�2+�0�2'�0�2group�0�2by�0�2'�0�2+�0�2@strGroup�0�2--查询结尾�0�2�0�2EXECUTE(@strsql)�0�2--执行�0�2�0�2IF�0�2@@error�0�2<0�0�2RETURN�0�2@@error�0�2--如果出错,返回错误代码�0�2�0�2CLOSE�0�2corss_cursor�0�2�0�2�0�2DEALLOCATE�0�2corss_cursor�0�2RETURN�0�20�0�2--释放游标,返回0表示成功endGO几点说明:a、这是一个通用存储过程,使用时@strTabName、@strCol、@strGroup、@strNumber、@strSum几个变量设置一下就可以用到其他表上,其中结果集的第二列我加了个合计列 b、为了测试方便,我在存储过程中设置了默认值,就是前面提到的Employees表,这样直接运行时就可以出来我上面提到的结果。 c、使用时,可以把上面的代码复制到企业管理器的查询设计界面Sql窗格,或者查询分析器里运行一下(注意正确选择NorthWind数据库),就可以生成一个存储过程:CorssTab,然后直接运行CorssTab,如果出现本文前面类似的窗格,就表示运行成功了。 d、假如用于其它表,首先需要在你的用户数据库里生成此存储过程(当然也可以放到Master里,然后再加个变量:@DataBase,赋值为数据库名称,然后在上面代码打开指定数据库,这样所有的数据库都可以调用它),当你调用时,采取以下格式:

Ⅷ MYSQL 动态查询

首先我想说MYSQL存储过程执行动态语句的语法有限,很多语法都不能用!
CREATE DEFINER = 'ks'@'192.168.18.110' PROCEDURE `testp`(IN b VARCHAR(30))
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
begin
declare namesql VARCHAR(100);
set @xxxx=CONCAT("select * from ",b);
prepare stmt1 from @xxxx;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END;
刚刚写的b是传入的参数,不知道是不是你要的东西!

Ⅸ sqlserver动态表名查询

因为表名是根据月份来创建的,所以创建视图需要利用参数作为表名进行查询

可以再加一个语句判断表是否存在

Ⅹ sql的动态查询的问题

tables应该是系统的视图,可以使用系统表根据需要创建一个自己定义的,不过需要足够的授权才可以执行。查询不出来一般来说都是权限问题。
最好使用视图的方式进行访问,可以创建一个视图:
create view v_tables as
select tablename,tabledev from tables;

然后使用查询语句查询,如果视图使用DBA创建,那么需要给用户授权。