当前位置:首页 » 编程语言 » sql语句拼接变量
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql语句拼接变量

发布时间: 2022-02-16 10:18:02

⑴ 动态执行sql语句,拼接字符串,select中带有一个变量

--1. 构造使用IN子句的动态Transact-SQL方法进行编号查询

--a. 要查询的字段类型是数字型

--查询的值列表
DECLARE @idlist varchar(100)
SET @idlist='1,2,3'

--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
GO

--b. 要查询的字段类型是字符型
--查询的值列表已经加上了字符串边界符
DECLARE @idlist varchar(100)
SET @idlist='''a'',''b''''a'',''c'''

--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
GO

--查询的值列表没有字符串边界符
DECLARE @idlist varchar(100)
SET @idlist='a,b''a,c'

--由于是字段类型是,所以在拼接时,必须为其加上字符串边界符(')
DECLARE @s varchar(1000)
SET @s=''''
+REPLACE(REPLACE(@idlist,'''',''''''),',',''',''')
+''''

--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@s+')')
GO

/*=====================================================*/

--2. 使用LIKE或者PATINDEX进行编号查询
--查询的值列表
DECLARE @idlist varchar(100)
SET @idlist='1,2,3'

--查询
SELECT * FROM tbname WHERE CHARINDEX(','+RTRIM(fdname)+',',','+@idlist+',')>0
SELECT * FROM tbname WHERE PATINDEX('%,'+RTRIM(fdname)+',%',','+@idlist+',')>0
SELECT * FROM tbname WHERE ','+@idlist+',' LIKE '%,'+RTRIM(fdname)+',%'
GO

/*=====================================================*/

--3. 编号查询中常见的错误
--a. 最容易犯的错误:表达式充当表达式列表。
DECLARE @s varchar(100)
SET @s='1'
SELECT id,name FROM sysobjects WHERE id IN(@s)
/*--结果
id name
---------------- ------------
1 sysobjects
--*/

SET @s='1,2,3'
SELECT id,name FROM sysobjects WHERE id IN(@s)
/*--结果
服务器: 消息 245,级别 16,状态 1,行 3
将 varchar 值 '1,2,3' 转换为数据类型为 int 的列时发生语法错误。
--*/
GO

--b. 生成动态Transact-SQL语句时忽略了数据类型。
DECLARE @s varchar(100)
SET @s='U,S'
EXEC('SELECT id,name FROM sysobjects WHERE id IN('+@s+')')
/*--结果:
服务器: 消息 207,级别 16,状态 3,行 1
列名 'S' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'U' 无效。
--*/
GO

--c. 忽略了比较的精确性问题。
--要查询的数据
DECLARE @t TABLE(col varchar(10))
INSERT @t SELECT '1'
UNION ALL SELECT '11'
UNION ALL SELECT '111'
UNION ALL SELECT '22'

--查询
DECLARE @s varchar(100)
SET @s='111,22'
SELECT * FROM @t WHERE CHARINDEX(col,@s)>0
/*--结果
col
----------
1
11
111
22
-*/
GO

⑵ php sql语句与变量到底怎么拼接

要考虑到字符串本身是要用引号括住的,所以要这样:
$sql = "insert into users (slug,email,`password`,nickname) values ('".$slug."','".$email."','".$password."','".$nickname."')";
或者
$sql = "insert into users (slug,email,`password`,nickname) values ('$slug','$email','$password','$nickname')";

⑶ 求助:存储过程的sql拼接如何调用变量值谢谢!

其实你这样写就可以啦
CREATE PROCEDURE [dbo].[sp_getAppByLgName]
(@loginName VARCHAR(32))
AS
BEGIN
SET NOCOUNT ON;
DECLARE @UserAppId NVARCHAR(256)
DECLARE @getAppSql NVARCHAR(4000)

SET @UserAppId = (SELECT UserAppId FROM tb_AppManager tam WHERE LOWER(tam .UserAccount) = LOWER(@loginName))

IF @UserAppId <> ''
BEGIN
SELECT @getAppSql =
'SELECT Name = tai.AppName_CN FROM tbAppInfo tai(NOLOCK) WHERE
charindex(tai.AppId,'''+@UserAppId +''')>0'

EXEC sys.sp_executesql @getAppSql
END
END

⑷ sql语句中变量与字符串连接问题

这是由于你的变量声明为定长字符型的缘故,你给变量@A设置的为定长20位长,通过SET @A = '_' + @B 给变量@A赋赋值后,里面存储的内容为"_0 ",即后面有18个空格,你后面有通过SET @A = @A + 'f'给它赋值,超过20位长,所以后面的f就无法保存.解决办法有两种:
1.把DECLARE @A NCHAR(20)改为:DECLARE @A NVARCHAR(20)
2.把SET @A = @A + 'f'改为:SET @A = RTRIM(@A) + 'f'

⑸ SQL语句问题动态拼接

请注意一点:
sql中,变量相加,如果其中有一个变量的数据类型是数字型,那么sql会自动把其他的变量转换为数字型,然后相加。
通过你的错误原因,可以看出,你的代码中,应该是 @StartIndex 和 @EndIndex 这两个变量的数据类型是 int型。

修改方式:
把 @StartIndex 和 @EndIndex 分别改成: Cast(@StartIndex as varchar(10)) 和 Cast(@EndIndex as varchar(10))
如果还有其他变量是int型,也参照上边的方式,强制转换为字符型就OK了。

⑹ php初学者,sql语句与变量拼接是怎么写的,

值加引号 insert into users(name,password) values('$a','$b')

⑺ SQL中语句中加变量

这里最后添加/r/n

⑻ ASP中 sql语句和变量的拼接问题。

一、你把[&
a]写到了引号内部,那么他就变成字符串的一部分了,因此不会把值传入。修改:sql="select
*
from
file
where
name
like"
&
a
二、sql=sql1&"
where
jrzynl<10
"
运行成功的原因是sql1和后面的["
where
jrzynl<10
"]之间有一个空格。而[sql=sql1&sql2]则没有导致了sql文就是错误的。
详细如下:
sql1&"
where
jrzynl<10
"
的结果:select
*
from
file
where
jrzynl<10
sql1&sql2的结果:select
*
from
filewhere
jrzynl<10
---
以上,希望对你有所帮助。

⑼ 如何执行拼接的sql语句,并把查询结果赋值给变量

单独定义声明变量后,在语句里使用into,如下:
select count(*) into num from table1;

⑽ SQL语句 变量连接

改成:
declare @sql varchar(1000)
set @sql='男'
EXEC master..xp_cmdshell 'bcp "Select top 10 * from DBname.dbo.OBJstudent where fsex= '+char(39)+@sql+char(39)+'" queryout "d:\tt.txt" -c -t ,-Usa -Ppassword'