Sql server 根据不同的查询条件拼接SQL
测试表 user
id | name | age |
---|---|---|
1 | 小明 | 18 |
测试存储过程如下:
---存储过程展示了查询条件拼接
ALTER PROCEDURE [dbo].[test]
@c AS int
AS
BEGIN
declare @b nvarchar(max) ---声明变量存储不变的sql部分,用nvarchar类型
SET @b = 'SELECT * FROM [user] WHERE ' ---变量赋值
IF @c<11 ---根据变量判断拼接查询语句
BEGIN
SELECT @b =@b+'age<'+CAST(@c as nvarchar(5) ) --拼接sql
END
EXEC sp_executesql @b --执行拼接完成的sql
END
注意事项:
1. 变量类型用nvarchar类型
2. 拼接SQL时赋值类型转换int转换为nvarchar类型
3. 如果要加单引号用四个单引号转义'''',实例如下:
SELECT @sql = @sql+'a.FBILLNO='+''''+@billno+''''
4. 时间类型的转换,实例如下:
SELECT @sql = @sql+'a.FCREATEDATE BETWEEN '+''''+CONVERT(varchar(20), @start,120)+''''+'AND'+''''+CONVERT(VARCHAR(20),@end,120)+''''
上天入地
无所不能