简介:这是在Sql Server查询语句中能不能用变量表示表名 - MS-SQL Server / 基础类的详细页面,介绍了和mssql,在Sql Server查询语句中能不能用变量表示表名 - MS-SQL Server / 基础类有关的知识,加入收藏请按键盘ctrl+D,谢谢大家的观看!要查看更多有关信息,请点击此处
在Sql Server查询语句中能不能用变量表示表名
declare @d nvarchar(55)
set @d = 'A'
select * from @d
我这样做总不对
回答 1
------其他回答(20分)---------
SQL code
declare @d nvarchar(55)
set @d = 'A'
exec('
select * from ' + @d + '
')
------其他回答(20分)---------
SQL code
有时间看看动态语句基本语法:
1 :普通SQL语句可以用exec执行
Select * from tableName
exec('select * from tableName')
exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3. 输出参数
declare @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?
declare @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
1 :普通SQL语句可以用Exec执行 例: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
错误: declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
正确: Exec('select ' + @fname + ' from tableName') -- 请注意加号前后的单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
--注:@s参数必须为ntext或nchar或nvarchar类型,必须将declare @s varchar(1000) 改为declare @s Nvarchar(1000)
如下:
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @fname = 'FiledName' --设置字段名
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3. 输入或输出参数
(1)输入参数:
declare @QueryString nvarchar(1000) --动态查询语句变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
declare @input_id int--定义需传入动态语句的参数的值
set @QueryString='select * from tablename where id=@id' --id为字段名,@id为要传入的参数
set @paramstring='@id int' --设置动态语句中参数的定义的字符串
set @input_id =1 --设置需传入动态语句的参数的值为1
exec sp_executesql @querystring,@paramstring,@id=@input_id
若有多个参数:
declare @QueryString nvarchar(1000) --动态查询语句变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
declare @input_id int--定义需传入动态语句的参数的值,参数1
declare @input_name varchar(20)--定义需传入动态语句的参数的值,参数2
set @QueryString='select * from tablename where id=@id and name=@name' --id与name为字段名,@id与@name为要传入的参数
set @paramstring='@id int,@name varchar(20)' --设置动态语句中参数的定义的字符串,多个参数用","隔开
set @input_id =1 --设置需传入动态语句的参数的值为1
set @input_name='张三' --设置需传入动态语句的参数的值为"张三"
exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name --请注意参数的顺序
(2)输出参数
declare @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?
declare @QueryString nvarchar(1000) --动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
declare @paramstring nvarchar(200) --设置动态语句中的参数的字符串(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
declare @output_result int--查询结果赋给@output_result
set @QueryString='select @totalcount=count(*) from tablename' --@totalcount 为输出结果参数
set @paramstring='@totalcount int output' --设置动态语句中参数的定义的字符串,多个参数用","隔开
exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
select @output_result
当然,输入与输出参数可以一起使用,大家可以自己去试一试。
另外,动态语句查询的结果集要输出的话,我只想到以下用临时表的方法,不知各位有没有更好的方法.
IF object_id('[tempdb].[dbo].#tmp') IS NOT NULL --判断临时表#tmp是否存在,存在则删除
drop table #tmp
select * into #tmp from tablename where 1=2 --创建临时表#tmp,其结构与tablename相同
declare @QueryString nvarchar(1000) --动态查询语名变量(注:必须为ntext或nchar哐nvarchar类型,不能是varchar类型)
set @QueryString='select * from tablename '
insert into #tmp(field1,field2,...) exec(@querystirng)
该文来自网络,URL为:http://www.dnbcw.com/biancheng/mssql/hmat110701.html
下面给出针对上面的文章的样例:
declare @ltquerystring varchar(800)
set @ltquerystring='select @v_msg_status=msg_status ,@v_recv_status=recv_status from WAS_SMS.DB_CustomSMS.dbo.jy_xiaxing where reserve2=@t_seqno'
exec sp_executesql @ltquerystring,@paramstring,@v_msg_status=@msg_status output,@v_recv_status=@recv_status output,@t_seqno=@v_seqno
分享到:
相关推荐
它可以自动处理与SQL Server的通信,包括执行SQL语句、处理结果集等,背后的实现可能依赖于上述的DLL文件。 5. **发布和部署**:当PowerBuilder应用被发布时,所有依赖的DLL文件都需要一起打包,以确保在目标环境...
在SQL Server中,存储过程是一种预编译的SQL语句集合,可以用于执行常见的数据库操作,如数据插入、更新和删除。在这个特定的例子中,我们讨论的是一个名为`spGenInsertSQL`的存储过程,它的功能是根据输入的表名...
此外,如果将编码转换后的字符串直接插入到SQL语句中,而不是通过参数化查询,可能会导致SQL语句解析错误。 最终,通过在字符串变量周围加上单引号来明确指定字符串值的开始和结束,解决了SQL Server的解析问题。...
### SQL方法用于汉字转换拼音 在数据库操作过程中,有时候我们需要对中文进行处理,例如将汉字转换为拼音。本文将详细介绍一种使用SQL实现汉字到拼音转换的方法,并解释其工作原理及应用场景。 #### SQL函数:fun_...
12. **游标表达式**:在SQL查询中直接使用PL/SQL变量,使得在SELECT语句中能动态处理数据。 13. **绑定变量**:绑定变量用于动态SQL,允许在执行时传递参数,提高了代码的可读性和安全性。 学习和掌握Oracle PL/...
SQL(Structured Query Language)是用于管理关系数据库的标准编程语言,包括对数据的查询、更新、插入和删除,以及数据库结构的创建和修改。下面将详细介绍SQL语法的几个主要部分,以及与之相关的概念。 一、T-SQL...
2. **执行计划分析**:通过EXPLAIN PLAN或DBMS_XPLAN可以查看SQL语句的执行计划,理解查询如何在数据库中执行,包括表的访问方式、连接顺序、索引使用情况等,从而找出性能瓶颈。 3. **绑定变量**:使用绑定变量...
在PL/SQL程序中,SELECT语句通常与INTO关键字一起使用,将查询结果直接赋值给变量。例如,获取单个记录: ```sql DECLARE var_name datatype; BEGIN SELECT column_name INTO var_name FROM table_name WHERE ...
【数据库试题】主要涵盖SQL Server 2000的相关知识,包括数据库的体系结构、管理工具、SQL语言组成、数据库文件类型、实体-联系模型、数据类型、事务属性、数据库操作命令以及SQL语句的选择、更新和删除操作。...
7. **约束条件**:在创建表时,可以设置列的约束,如`NOT NULL`确保字段不能为null,`UNIQUE`保证字段值的唯一性,`PRIMARY KEY`定义主键,它是表中能唯一标识一条记录的字段。 8. **数据类型**:SQL支持多种数据...
组态王通过ODBC数据库,建立时间间隔查询,使用2个日历控件,在控件属性上挂年月日时分秒和系统变量关联,然后复制代码,调试的时候,再多建立个条件查询,在组态王初级培训上有,可以对比SQL的where的语句,帮助...
局部变量以`@`开头,Transact-SQL语句通常在查询分析器中执行。注释是辅助理解代码的文字,不参与执行。`CASE`结构在SQL Server中作为表达式的一部分,`BEGIN`和`END`用于定义代码块,`BREAK`和`CONTINUE`控制循环...
学会使用SqlConnection对象创建连接字符串,SqlCommand对象执行SQL语句,以及SqlDataReader或DataSet对象获取和处理数据,是实现数据交互的关键。 四、设计用户界面 酒店管理系统需要一个直观且易于操作的用户界面...
16. 用于执行SQL语句的MySQL客户端工具不包括 `mysqld`,因为它是MySQL服务器的守护进程,而不是用于交互式查询的工具。 17. "打印范围"是打印命令对话框中设置的内容之一,可以指定打印文档的特定部分。 18. 删除...
本实例将深入探讨如何利用VB.NET进行数据库开发,涵盖了从连接数据库、执行SQL语句到数据展示等多个关键环节。 1. **数据库连接**: - VB.NET使用ADO.NET(ActiveX Data Objects .NET)框架与各种数据库(如SQL ...
某些在Oracle中能正常工作的子查询在MySQL下可能不被支持,需要对SQL语句进行调整或重构。 4. **字符匹配规则** - 不同数据库对特殊字符的处理方式不同,这可能影响到查询和比较操作。在移植时,需要对SQL语句进行...
2. 标识符的合法性:在编程语言中,合法的标识符不能以数字开头,不能包含特殊字符如*(A),可以包含字母、数字和下划线,并且不能是关键字。 3. 主键的特性:主键是关系数据库中用于唯一标识一条记录的字段,它不...
3. SQL查询语句:查询类型为"电器"的商品信息,正确的SQL语句是`SELECT * FROM 商品 WHERE 类型 = '电器'`。 4. 对象加互斥锁的关键字:Java中使用`synchronized`关键字实现对象的互斥访问。 5. 关系操作特点:...
3. **SQL语句**:`SELECT`语句是最基本的查询语句,至少包括`SELECT`和`FROM`部分来指定要选择的列和来源表。`ORDER BY`用于排序结果,`INTO`常用于将查询结果插入到新的表或变量中。 4. **DBMS**:DBMS代表数据库...