當前位置:首頁 » 編程語言 » 手寫sql執行過程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

手寫sql執行過程

發布時間: 2022-10-30 13:33:54

『壹』 拜求高手寫兩sql存儲過程語法

這個還需要過程需要過程來實現嗎?直接兩句SQL就能完成的啊
1、select count(1) from borrow where id = ?
2、insert into borrow(id,book_id)
select ?,1 from reader

『貳』 為什麼要用微軟企業庫與自己手寫SQL有啥區別

首先我們必須添加引用(dll在安裝文件的目錄中)using System.Data;using Microsoft.Practices.EnterpriseLibrary.Data;下面列出一些模塊常用的獲取數據、更新數據方法,其中有一些和直接使用ADO.NET中的方法很相似:方法功能ExecuteDataset,創建,載入,返回數據集LoadDataSet,載入數據到一個已經存在的數據集 TransactionScope,支多項事務同時執行,一旦發生異常則會回滾所有操作填充一個數據集,使用數據集更新資料庫ExecuteReader,創建,返回一個provider獨立的DbDataReader實例從資料庫讀取多行數據ExecuteNonQuery,執行command,返回資料庫受影響的行數,可以通過output返回多個值ExecuteScalar,執行command,返回單個值第一行第一列的值執行command資料庫命令對象ExecuteSproAccessor,使用存儲過程返回一個客戶端可以查詢的序列對象ExecuteSqlStringAccessor,使用SQL語句返回一個客戶端可以查詢的序列對象以序列對象的形式返回數據ExecuteXmlReader,返回xml格式的數據,xmlReader類型,這個只能用在SQL Server資料庫,通過SqlDatabase類調用,Database類中沒有這個方法。獲取xml格式數據(只能用在SQL Server資料庫)GetStoredProcCommand,返回一個存儲過程的資料庫command對象GetSqlStringCommand,返回一個SQL語句的資料庫command對象創建一個Command對象AddInParameter,創建一個新的input參數,並且加入command的參數集合AddOutParameter,創建一個新的output參數,並且加入command的參數集合AddParameter,創建一個指定類型的參數,並且加入command的參數集合GetParameterValue,以Object類型返回指定參數的值SetParameterValue,給指定參數賦值處理command的參數CreateConnection,創建,返回當前資料庫的連接,允許你通過這個鏈接初始化和管理資料庫事務處理資料庫事務下面我們通過案例來演示以上常用的方法的使用:1、 首先我們來編輯配置文件:在菜單欄中選定BlocksAdd Data Setting來添加資料庫的類型和連接字元串 [轉載]如何使用微軟企業庫對資料庫的訪問name由應用程序訪問的資料庫實例的邏輯名稱。在節中,名稱必須是唯一的。此屬性是必須的。providerName提供程序的名稱。默認情況下,提供程序的名稱定義在 Machine.config 文件中。providerName 名稱必須是一個在 DBProviderFactory 類中指定的提供程序的名稱。此屬性是必須的。connectionString可用於被選的提供程序的連接字元串,此屬性是必須的。 首先我們實例化一個DataBase private static Database db = DatabaseFactory.CreateDatabase("Test"); 1. ExecuteDataset:創建,載入,返回數據集,ExecuteScalar返回單個值第一行第一列的值string sql = "select * from [User]";DbCommand com = db.GetSqlStringCommand(sql);//執行並返回數據集rptTest.DataSource = db.ExecuteDataSet(com).Tables[0];rptTest.DataBind(); [轉載]如何使用微軟企業庫對資料庫的訪問2 . LoadDataSet,載入數據到一個已經存在的數據集 private void LoadDataSet() { DataSet table; string sql = "select * from [User]"; DbCommand com = db.GetSqlStringCommand(sql); DbCommand com1 = db.GetSqlStringCommand(sql); table = db.ExecuteDataSet(com1); // 執行com 並將所得到得結果追加的數據集table中 db.LoadDataSet(com, table, "table"); rptTest.DataSource = table.Tables["table"]; rptTest.DataBind(); } [轉載]如何使用微軟企業庫對資料庫的訪問3.ExecuteReader,創建,返回一個provider獨立的DbDataReader實例 private void ExecuteReader() { string sql = "select * from [User]"; DbCommand com = db.GetSqlStringCommand(sql); IDataReader read = db.ExecuteReader(com); Label1.Text=" div class='left title' 姓名/divdiv class='right title' 郵箱/divdiv style='clear: both; width:200px' while (read.Read()) { //獲取該列的所有信息 object[] values = new object[3]; read.GetValues(values); Label1.Text += "div class='left'" + values[0].ToString() + "/div" + "div class='left'" + values[2].ToString() + "/div } Label1.Text += "/div read.Close(); } [轉載]如何使用微軟企業庫對資料庫的訪問4. ExecuteScalar,執行command,返回單個值第一行第一列的值 string sql = "select * from [User]"; DbCommand com = db.GetSqlStringCommand(sql); bl.Text = string.Format("第一行第一列的數據:{0}", db.ExecuteScalar(com).ToString()); [轉載]如何使用微軟企業庫對資料庫的訪問5. GetSqlStringCommand方法用於 SQL 文本命令 protected void Page_Load(object sender, EventArgs e) { select(); } private void getSqlStringCommand(string sqlQuery) { //GetSqlStringCommand方法的使用 DbCommand com = db.GetSqlStringCommand(sqlQuery); db.ExecuteNonQuery(com); select(); }//為了區別添加數據跟已有數據區分開來 private static int ID = 0; //插入數據 protected void Insert_Click(object sender, EventArgs e) { getSqlStringCommand("insert[User] values('江蘇邁瑞" + (ID++).ToString() + "'," + "'www.maxray.com','[email protected]') "); } //查詢信息 private void select() { string sqlQuery = "select * from [User] "; DbCommand com = db.GetSqlStringCommand(sqlQuery); rptGetSqlStringCommand.DataSource = db.ExecuteDataSet(com).Tables[0]; rptGetSqlStringCommand.DataBind(); } //刪除信息 protected void bntDelete_Click(object sender, EventArgs e) { getSqlStringCommand("delete [User] where UserName='江蘇邁瑞"+ (ID--).ToString()+"'"); } //更新數據 protected void update_Click(object sender, EventArgs e) { getSqlStringCommand("update [User] set UserName='updata_江蘇邁瑞' where UserName='測試1' "); } [轉載]如何使用微軟企業庫對資料庫的訪問6. GetStoredProcCommand方法用於執行存儲過程命令private void getStoredProcCommand() { //執行存儲過程 (不帶參數) DbCommand com = db.GetStoredProcCommand("proc_list"); rptGetStoredProcCommand.DataSource = db.ExecuteDataSet(com).Tables[0]; rptGetStoredProcCommand.DataBind(); } [轉載]如何使用微軟企業庫對資料庫的訪問7.參數處理(存儲過程和T-Sql中的參數)1. Database中的GetStoredProcCommand方法用於執行存儲過程命令。2. Database中的GetSqlStringCommand方法用於 SQL 文本命令。二個方法都返回一個DbCommand對象。 (1)sql語句中的參數處理 string sql = "select * from [User] where ID=@ID "; DbCommand com=db.GetSqlStringCommand(sql);//添加參數 db.AddInParameter(com, "@ID", DbType.Int32, 1); rptTest.DataSource = db.ExecuteDataSet(com).Tables[0]; rptTest.DataBind();(2)存儲過程中的參數處理(參數以「proc_「為存儲過程)a)參數發現//直接指定參數的值,在這里要注意參數出現的順序應與存儲過程中的順序相同。如果數據類型轉換失敗,則報出異常。 DbCommand com = db.GetStoredProcCommand("proc_Test","測試",12); db.ExecuteNonQuery(com); b) 處理參數 AddInParameter,創建一個新的input參數,並且加入command的參數集合AddOutParameter,創建一個新的output參數,並且加入command的參數集合AddParameter,創建一個指定類型的參數,並且加入command的參數集合GetParameterValue,以Object類型返回指定參數的值 private void GetStoredProcCommand() { DbCommand com = db.GetStoredProcCommand("proc_Login"); //設置指定參數的值、類型 db.AddInParameter(com, "@Psd", DbType.Int32, 12); db.AddInParameter(com, "@UserName", DbType.String, "1212"); //獲取資料庫中的返回值db.AddParameter(com, "@retrunvalue", DbType.String, ParameterDirection.ReturnValue, null, DataRowVersion.Current, null); db.AddOutParameter(com, "@outputEmail", DbType.String, 20);db.ExecuteNonQuery(com); string Rvalue=com.Parameters["@retrunvalue"].Value.ToString(); string OEmail= com.Parameters["@outputEmail"].Value.ToString(); string GValue = db.GetParameterValue(com,"@name").ToString(); lblInfo.Text = "div class='left title' 返回的參數為/divbr/ br/GetParameterValue=" + GValue + "br / AddOutParameter=" + OEmail + "br / ReturnValue=" + Rvalue; } 存儲過程 ALTER proc [dbo].[proc_Login]@Psd varchar(50),@UserName varchar(50) ,@outputEmail varchar(50) outputAS BEGIN set @outputEmail=( SELECT Email FROM [User] WHERE Psd = @Psd and UserName=@UserName) return @@rowcount END [轉載]如何使用微軟企業庫對資料庫的訪問8. ExecuteSproAccessor,使用存儲過程返回一個客戶端可以查詢的序列對象 private void executeSproAccessor() { var student = db.ExecuteSprocAccessorStudent("proc_Test","江",1); Student[] std = student.ToArray(); for (int i = 0; i std.CountStudent i++) { Label1.Text += std[i].id + " " + std[i].email + " " + std[i].psd + " " + std[i].username + "br/ } } [轉載]如何使用微軟企業庫對資料庫的訪問9. ExecuteSqlStringAccessor,使用SQL語句返回一個客戶端可以查詢的序列對象private void executeSproAccessor() { var student = db.("select * from [User]"); Student[] std = student.ToArray(); for (int i = 0; i std.CountStudent i++) { Label1.Text += std[i].id + " " + std[i].email + " " + std[i].psd + " " + std[i].username + "br/ } } [轉載]如何使用微軟企業庫對資料庫的訪問10. ExecuteXmlReader,返回xml格式的數據,xmlReader類型,這個只能用在SQL Server資料庫,通過SqlDatabase類調用,Database類中沒有這個方法。private void executeXmlReader () { string sql = "SELECT * FROM [User] FOR XML AUTO"; Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabasesqlDB=(Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase)db; DbCommand cmd = sqlDB.GetSqlStringCommand(sql); var reader = sqlDB.ExecuteXmlReader(cmd); string xml= "?xml version='1.0' encoding='utf-8' ?root while (!reader.EOF) { if ((reader.IsStartElement())) { xml += reader.ReadOuterXml(); } } xml += "root Response.Write(xml); Response.End(); } [轉載]如何使用微軟企業庫對資料庫的訪問11. TransactionScope支多項事務同時執行,一旦發生異常則會回滾所有操作 protected void TransactionScope() {// insert操作會發生失敗,同時會回滾delete事件 string sqlInsert = "insert [User] values('12','江蘇邁瑞')"; string sqlDelete = "delete [User] where ID=8"; try { using (TransactionScope sp = new TransactionScope(TransactionScopeOption.RequiresNew)) { db.ExecuteNonQuery(CommandType.Text, sqlDelete); db.ExecuteNonQuery(CommandType.Text, sqlInsert); sp.Complete(); } } catch (Exception ex) { Response.Write(ex.Message); } }}

『叄』 求高手寫個 sql語句

select BefoeName=(select B.BranchName from T_Branch AS B where BranchID=BefoerBranchID)
,AfterName=(select A.BranchName from T_Branch AS A where BranchID=AfterBranchID)
from T_transferRecord where WorkerID=@WorkerID
是否可以解決您的問題?

『肆』 求sql高手寫sql查詢語句,問題在補充裡面!的圖片上面

tim_spac的查詢應該沒錯啊。
你得說明數據不準是啥意思。
如果是 SQLServer, 其中math,physics存在NULL(即有些人沒有考試成績)就會有些問題。
如改成 sum(isnull(math,0) + isnull(physics,9)), 去除欄位中的某些NULL值。

『伍』 求高手寫個sql查詢語句

sc表為core表
select
gx.student_name,gx.score1 as 語文,gx.score2 as 數學 ,sc3.score as 英語
from
(select gs.student_name,gs. student_id, gs.score1,sc2.score as score2
from
(select student_name, student_id, score as score1 from student s inner join sc on s.student_id=sc.sid inner join course c on sc.cid=c.course_id where c.course_id='1')
gs inner join sc sc2 on gs.student_id=sc2.sid inner join course c2 on sc2.cid=c2.course_id where c2.course_id='2') gx
inner join sc sc3 on gx.student_id=sc3.sid inner join course c3 on sc3.cid=c3.course_id where c3.course_id='3'

『陸』 尋覓高手寫Oracle SQL語句

這個一定能行:

select
name,
sum(case when state=1 then 1 else 0 end) "1",
sum(case when state=2 then 1 else 0 end) "2"
from 表名
group by name;

********************
補充:我寫成這樣只是為了方便看(這個符合程序開發的原則),如果非得弄成一行:
select name,sum(case when state=1 then 1 else 0 end) "1",sum(case when state=2 then 1 else 0 end) "2" from 表名 group by name;

實施log:
[TEST@ORA1] SQL>select * from test1;

N STATE
- ----------
A 1
A 1
A 2
B 1
B 2
B 2

6 rows selected.

[TEST@ORA1] SQL>select
2 name,
3 sum(case when state=1 then 1 else 0 end) "1",
4 sum(case when state=2 then 1 else 0 end) "2"
5 from test1
6 group by name;

NAME 1 2
---- ---------- ----------
A 2 1
B 1 2
********************

---
以上,希望對你有所幫助。

『柒』 sql server中為什麼手寫存儲過程卻有錯誤

你這個是新建的存儲過程,會出現這種情況。
資料庫在新建一個對象後之後,並沒有立馬出現代碼智能提示,可能會出現紅色波浪線標注的"對象名**無效"的提示,這時只需要點擊下「編輯->IntelliSense->刷新本地緩存",這樣就會出現代碼只能提示了。

『捌』 求高手寫個sql實現兩個表的數據的遷移。

不知道你什麼資料庫.
如果 Oracle , 倒是很省事。 創建一個序列號, 2個表共用。
A表插入的時候,取 下一個序列號, B表插入的時候,取當前序列號。

如果是 SQL Server 或者 MySQL 這種,用資料庫系統自增的。
就自己控制好,別插入一條A,再插入兩條B這種情況發生。
不過如果發生異常,還是會導致不匹配的。
例如首先插入A, 某些 Check 沒通過,數據沒插入,但是那個自增的ID可能被遞增了。

想返回表A中最大的id和表B中最大的id的差值
倒是很簡單
SELECT
MAX(A.id) - MAX(B.id) AS 差值
FROM
A FULL JOIN B ON (A.id = B.id)歡迎共同討論!。www.365testing.com。DDDD

『玖』 求資料庫高手寫個sql語句

SELECT
DISTINCT
t1.key
FROM
t1
WHERE
t1.valuein
(
SELECT
t2.value
FROM
t2
)