2023年6月21日发(作者:)
SQLServer表值参数使⽤SQL Server⾃2008版本开始⽀持表类型的参数,可以⽤于存储过程、函数等,也可以直接使⽤C#等语⾔调⽤SQL直接查询。⾸先创建⼀个表值类型:设置表格参数(后⾯变化时不可直接修改,需要删除重建):USE [test]GO-- Create the data typeCREATE TYPE _testStruct AS TABLE
( ID INT NOT NULL, Val DECIMAL NOT NULL,
PRIMARY KEY (ID))GO弄个存储过程:表值参数只能是Readonly的,不能作为outputCREATE PROC structTest ( @table AS type_testStruct READONLY )AS BEGIN SELECT ID , Val * 2 AS Val FROM @table; END;测试调⽤存储过程:DECLARE @table AS type_testStruct;INSERT @table ( ID , Val ) VALUES ( 1 , 10 )INSERT @table ( ID , Val ) VALUES ( 2 , 20 )INSERT @table ( ID , Val ) VALUES ( 3 , 30 )EXEC structTest @table结果:C#调⽤⽰例:(此⽰例调⽤另外⼀个过程,⽤法相同) DataTable dt = new DataTable(); ("ID", typeof(int)); ("Val", typeof(decimal)); DataRow row = (); row[0] = 9; row[1] = 1000; (row); DataRow row2 = (); row2[0] = 10; row2[1] = 2000; (row2); var sql = "getInfoForReportByMOProcessRowIDAndQty"; var dt2 = eDataset(, Procedure, sql, new SqlParameter("values", dt)).Tables[0]; SON(dt2);结果:可以看到,调⽤时和普通参数没有太⼤差别,只是传的值是⼀个DataTable⽽已。直接SQL调⽤,主要差别在参数要设置类型: SqlParameter tablePara = new SqlParameter("values", ured);//参数的类型,ured me = "eStruct"; //这个就是建⽴的类型名称,⽐如上⾯的type_testStruct = valuesTable;其他就和普通的查询⼀样了
2023年6月21日发(作者:)
SQLServer表值参数使⽤SQL Server⾃2008版本开始⽀持表类型的参数,可以⽤于存储过程、函数等,也可以直接使⽤C#等语⾔调⽤SQL直接查询。⾸先创建⼀个表值类型:设置表格参数(后⾯变化时不可直接修改,需要删除重建):USE [test]GO-- Create the data typeCREATE TYPE _testStruct AS TABLE
( ID INT NOT NULL, Val DECIMAL NOT NULL,
PRIMARY KEY (ID))GO弄个存储过程:表值参数只能是Readonly的,不能作为outputCREATE PROC structTest ( @table AS type_testStruct READONLY )AS BEGIN SELECT ID , Val * 2 AS Val FROM @table; END;测试调⽤存储过程:DECLARE @table AS type_testStruct;INSERT @table ( ID , Val ) VALUES ( 1 , 10 )INSERT @table ( ID , Val ) VALUES ( 2 , 20 )INSERT @table ( ID , Val ) VALUES ( 3 , 30 )EXEC structTest @table结果:C#调⽤⽰例:(此⽰例调⽤另外⼀个过程,⽤法相同) DataTable dt = new DataTable(); ("ID", typeof(int)); ("Val", typeof(decimal)); DataRow row = (); row[0] = 9; row[1] = 1000; (row); DataRow row2 = (); row2[0] = 10; row2[1] = 2000; (row2); var sql = "getInfoForReportByMOProcessRowIDAndQty"; var dt2 = eDataset(, Procedure, sql, new SqlParameter("values", dt)).Tables[0]; SON(dt2);结果:可以看到,调⽤时和普通参数没有太⼤差别,只是传的值是⼀个DataTable⽽已。直接SQL调⽤,主要差别在参数要设置类型: SqlParameter tablePara = new SqlParameter("values", ured);//参数的类型,ured me = "eStruct"; //这个就是建⽴的类型名称,⽐如上⾯的type_testStruct = valuesTable;其他就和普通的查询⼀样了
发布评论