在C#代码中构造字符串传入SQL代码中

 

最近遇到一个需求,就是在C#代码中构造字符串然后传入SQL代码中,在SQL中分离此字符串,将结果构造成临时表,作为另一个SQL语句的 in 子句。

解决方案:创建一个函数用于分离字符串;定义一个表变量,用于构造临时表。注意:不能使用declare #tableName 创建临时表,因为这样创建的表会

存在tmpdb系统数据库里面,访问量大的情况下就会造成数据库服务器变大。

 C#代码中构造字符串,如:

string yo = "IT,ITMIS";

创建字符串分离函数

CREATE Function [dbo].[Split](@Sql varchar(8000))
returns @temp TABLE (code varchar(100))
As
Begin
DECLARE @Splits varchar(10)
SET @Splits=','
DECLARE @i Int
Set @Sql=RTrim(LTrim(@Sql))
Set @i=CharIndex(@Splits,@Sql)
While @i >= 1
Begin
Insert @temp Values(Left(@Sql,@i-1))
Set @Sql=SubString(@Sql,@i+1,Len(@Sql)-@i)
Set @i=CharIndex(@Splits,@Sql)
End
If @Sql <> ' '
Insert @temp VALUES (@Sql)
Return
End

创建临时表变量

      DECLARE @Sql VARCHAR(100)
      SET @Sql=@yo

嵌入主查询语句

      DECLARE @Sel INT
      DECLARE @codeTable TABLE(tmpCode NVARCHAR(100))
      INSERT INTO @codeTable(tmpCode) SELECT * FROM SPLIT(@Sql)
      SELECT * FROM dbo.ExpensesReimbursementVoucher WHERE DepartmentCode
      IN (SELECT * FROM @codeTable)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值