SQL Server 动态SQL拼接

版权声明:本文为博主原创文章,若转载请标明。 https://blog.csdn.net/qq_36330228/article/details/88937591

在多选项综合搜索数据时,大多会使用到动态SQL搜索,当搜索栏目中存在string,Guid,decimal等类型数据时,要注意拼接时数据类型转换,方法如下:

方法一:使用 SQL Server中的存储过程(StoredProcedure),在存储过程中拼接SQL,SQL拼接的语句为字符串,当我们去拼接Guid等特殊类型时就需要去转换成字符串,如果直接拼接,SQL会直接报错。
具体如下:

ALTER PROCEDURE [dbo].[GetProductList]
(
	@ProductID uniqueidentifier,
	@Price decimal(18, 2),
	@Description varchar(max)
)
AS
BEGIN
	Declare @strSql varchar(max);
	--SQL拼接
	SET @strSql='SELECT ProductID,Name,Price,Description FROM [test].[dbo].[Product] WHERE 1=1'
	
	IF(@ProductID is not null)
		begin 
			SET @strSql=@strSql+' AND ProductID= ''' +convert(varchar(36),@ProductID)+ ''''    --Guid类型转换
		end  
	IF(@Description!='')
		begin 
			SET @strSql=@strSql+' AND Description like ''%'+@Description+'%'''
		end 

	EXEC(@strSql)
END

方法二:直接在后台代码中,拼接SQL后,去执行SQL
具体如下:

public static void SQLFunction(Product product) {
			//SQL拼接
            string sql = "SELECT ProductID,Name,Price,Description FROM [test].[dbo].[Product] WHERE 1=1";
            if (product.ProductID!=null) {
                sql = sql + " AND ProductID='"+ product.ProductID + "'";
            }
            if (product.Description != "") {
                sql = sql + " AND Description like '%" + product.Description + "%'";
            }
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnection"].ConnectionString))
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandType = CommandType.Text;            
                cmd.CommandText = sql;
                cmd.Connection = conn;
                conn.Open();
           
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Product pro = new Product();                   
                    pro.Description = reader["Description"].ToString();
                    //...
                }
            }
        }

没有更多推荐了,返回首页