① sql語句使用變數的前提是什麼
雙擊滑鼠打開用於資料庫管理的「企業管理器」
② 動態執行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
③ 關於SQL語句中使用變數的問題
插入進去的數據的類型不匹配. 以int型和nvarchar型為例,其他的像日期型的你自己發揮.
問:
存儲過程這樣的:
CREATE PROCEDURE insertxuesheng @xuehao int,@xingming varchar,@banji varchar,@zhuanye varchar,@nianling int,@xingbie varchar AS
insert 學生(學號,姓名,班級,專業,年齡,性別) values(@xuehao,@xingming,@banji,@zhuanye,@nianling,@xingbie)
代碼這樣的:
SqlCommand cmd = new SqlCommand("insertxuesheng", conn);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.AddWithValue("@xuehao", TextBox1.Text);
cmd.Parameters.AddWithValue("@xingming",TextBox2.Text);
cmd.Parameters.AddWithValue("@banji", TextBox3.Text);
cmd.Parameters.AddWithValue("@zhuanye", TextBox4.Text);
cmd.Parameters.AddWithValue("@nianling", TextBox5.Text);
cmd.Parameters.AddWithValue("@xingbie", TextBox6.Text);
cmd.ExecuteNonQuery();
插入數據後我去看資料庫里的表,發現只有學號和年齡有數據,其他都是空值,怎麼回事
答:
傳入的數據類型不對.
因為學號和年齡是int型,所以傳入TextBoxN.Text可以. 因為這時TextBoxN.Text = " 123", 實際上的SQL語句中就是:xuehao=123
而針對其他的欄位,則都是字元型的,因此 在SQL語句中應該是: xingming = 'abc' .
而:cmd.Parameters.AddWithValue("@xingming",TextBox2.Text);
執行的結果是: xingming=abc.這當然就不行啦.
所以改為: cmd.Parameters.AddWithValue("@xingming","'" + TextBox2.Text + "'"); 就是給TextBoxN.Text前後各加一個引號再傳給存儲過程.
④ 帶有變數sql語句應該怎麼寫
'"+ a + "'這個寫法不變,
再執行SQL語句的時候executeSql(sql.replaceAll("'",""))這樣寫,要把單引號去掉,
因為你發現單引號的field是不能在mysql中查詢的,這和where中的條件還不一樣!
請叫我雷鋒
⑤ Sql中如何給變數賦值
DECLARE @n1 int,@n2 varchar(10)
set @n1 =(select age from table where column=xxx)
set @n2=(select gender from table where column = xxx )
------------------
或者一起賦值
就是樓上那個
DECLARE @n1 int,@n2 varchar(10)
select @n1 =age,@n2=gender
from table where column = xxx
------------------
select @n1,@n2 就知道變數的值了
⑥ 如何在SQL中聲明一個數組變數以及相關SQL語
集合:是具有相同定義的元素的聚合。Oracle有兩種類型的集合:
可變長數組(VARRAY):可以有任意數量的元素,但必須預先定義限制值。
嵌套表:視為表中之表,可以有任意數量的元素,不需要預先定義限制值。
在PL/SQL中是沒有數組(Array)概念的。但是如果程序員想用Array的話,就得變通一下,用TYPE 和Table of Record來代替多維數組,一樣挺好用的。
emp_type 就好象一個table 中的一條record 一樣,裡面有id, name,gender等。emp_type_array 象個table, 裡面含有一條條這樣的record (emp_type),就象多維數組一樣。
--單維數組
DECLARE
TYPE emp_ssn_array IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
best_employees emp_ssn_array;
worst_employees emp_ssn_array;
BEGIN
best_employees(1) := '123456';
best_employees(2) := '888888';
worst_employees(1) := '222222';
worst_employees(2) := '666666';
FOR i IN 1..best_employees.count LOOP
DBMS_OUTPUT.PUT_LINE('i='|| i || ', best_employees= ' ||best_employees(i)
|| ', worst_employees= ' ||worst_employees(i));
END LOOP;
END;
--多維數組
DECLARE
TYPE emp_type IS RECORD
( emp_id employee_table.emp_id%TYPE,
emp_name employee_table.emp_name%TYPE,
emp_gender employee_table.emp_gender%TYPE );
TYPE emp_type_array IS TABLE OF emp_type INDEX BY BINARY_INTEGER;
emp_rec_array emp_type_array;
emp_rec emp_type;
BEGIN
emp_rec.emp_id := 300000000;
emp_rec.emp_name := 'Barbara';
emp_rec.emp_gender := 'Female';
emp_rec_array(1) := emp_rec;
emp_rec.emp_id := 300000008;
emp_rec.emp_name := 'Rick';
emp_rec.emp_gender := 'Male';
emp_rec_array(2) := emp_rec;
FOR i IN 1..emp_rec_array.count LOOP
DBMS_OUTPUT.PUT_LINE('i='||i
||', emp_id ='||emp_rec_array(i).emp_id
||', emp_name ='||emp_rec_array(i).emp_name
||', emp_gender = '||emp_rec_array(i).emp_gender);
END LOOP;
END;
-------------- Result --------------
i=1, emp_id =300000000, emp_name =Barbara, emp_gender = Female
i=2, emp_id =300000008, emp_name =Rick, emp_gender = Male
⑦ SQL中語句中加變數
這里最後添加/r/n
⑧ sql查詢中where後面可以使用變數嗎
sql查詢中where後面可以使用變數,使用方法為;
1、select 欄位名 from 資料庫表 where 欄位=條件值;如下圖所示。