⑴ 動態執行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'