我的查询是这样的,但它什么都不返回 @ value0,@ value1,@ value2,@ value3,@ field0 changable字段它们可以是空值或值取决于来自表单的参数。 例如,当我输入这些值时,它不会返回任何内容 @page = 1,@ size = 20,@ sort = N' Id',@ ts = N' DESC',@ field0 = N'名称',@ value2 = N& #39; 2000-1-1',@值3 = NULL,@ VALUE1 = NULL,@ value0 =空 我做错了什么?
@page INT,
@size INT,@sort nvarchar(50) ,
@ts nvarchar(50) ,
@totalrow INT OUTPUT,
@value0 nvarchar(50),
@value1 nvarchar(50),
@value2 nvarchar(50),
@value3 nvarchar(50),
@field0 nvarchar(50)
AS
BEGIN
DECLARE @offset INT
DECLARE @newsize INT
DECLARE @sql NVARCHAR(MAX)
IF(@page=0)
begin
SET @offset = @page;
SET @newsize = @size
end
ELSE
begin
SET @offset = @page+1;
SET @newsize = @size-1
end
SET NOCOUNT ON;
SET @sql = '
WITH OrderedSet AS
(
SELECT Ks.Id,c.Name,c.CId,Ks.RegisterDate,ROW_NUMBER()
OVER (ORDER BY ' + @sort + ' '+@ts+') AS ''Index''
FROM Ks LEFT OUTER JOIN Car c On c.CId=Ks.CId WHERE
AND (Ks.RegisterDate >'''+@value2+''' OR '''+@value2+''' IS NULL)
AND (Ks.RegisterDate <'''+@value3+''' OR '''+@value3+''' IS NULL)
AND (Ks.RegisterDate ='''+@value1+''' OR '''+@value1+''' IS NULL)
AND ('+@field0+' LIKE ''%'+@value0+'%'' OR @value0 IS NULL)
)
SELECT * FROM OrderedSet WHERE [Index] BETWEEN ' +
CONVERT(NVARCHAR(12), @offset) + ' AND ' + CONVERT(NVARCHAR(12), (@offset + @newsize))
EXECUTE (@sql)
SET @totalrow = (SELECT COUNT(*) FROM [dbo].[Ks])
print @sql
答案 0 :(得分:1)
将null
连接到字符串时,结果为null
。
我在SQL syntax
看到太多错误,我正在猜测这个错误。例如,如果@value(n) is not null
其中一个@value(n)
中的一个必须是NULL
我强烈建议您查看@sql
值,然后更正其他错误。
接近null
参数值的建议方法可能是:
@page INT,
@size INT,@sort nvarchar(50) ,
@ts nvarchar(50) ,
@totalrow INT OUTPUT,
@value0 nvarchar(50),
@value1 nvarchar(50),
@value2 nvarchar(50),
@value3 nvarchar(50),
@field0 nvarchar(50)
AS
BEGIN
DECLARE @offset INT
DECLARE @newsize INT
DECLARE @sql NVARCHAR(MAX)
IF(@page=0)
begin
SET @offset = @page;
SET @newsize = @size
end
ELSE
begin
SET @offset = @page+1;
SET @newsize = @size-1
end
DECLARE @Ks_RegisterDate_Condition NVARCHAR(1000)
IF (@value1 IS NULL AND @value2 IS NULL AND @value3 IS NULL)
BEGIN
SET @Ks_RegisterDate_Condition = N'KsRegisterDate IS NULL'
END
ELSE
BEGIN
IF (@value1 IS NOT NULL)
BEGIN
SET @Ks_RegisterDate_Condition = N'(Ks.RegisterDate ='''+@value1+''''
END
IF (@value2 IS NOT NULL)
BEGIN
SET @Ks_RegisterDate_Condition = N'(Ks.RegisterDate >'''+@value2+''''
END
IF (@value3 IS NOT NULL)
BEGIN
SET @Ks_RegisterDate_Condition = N'(Ks.RegisterDate >'''+@value3+''''
END
END
IF (NOT (@field0 IS NULL OR @value0 IS NULL ) )
BEGIN
SET @Ks_RegisterDate_Condition += + N'AND ' + @field0+N' LIKE ''%'+@value0+N'%'''
END
SET NOCOUNT ON;
SET @sql = '
WITH OrderedSet AS
(
SELECT Ks.Id,c.Name,c.CId,Ks.RegisterDate,ROW_NUMBER()
OVER (ORDER BY ' + @sort + ' '+@ts+') AS ''Index''
FROM Ks LEFT OUTER JOIN Car c On c.CId=Ks.CId WHERE ' +
@Ks_RegisterDate_Condition + '
)
SELECT * FROM OrderedSet WHERE [Index] BETWEEN ' +
CONVERT(NVARCHAR(12), @offset) + ' AND ' + CONVERT(NVARCHAR(12), (@offset + @newsize))
print @sql
EXECUTE (@sql)
SET @totalrow = (SELECT COUNT(*) FROM [dbo].[Ks])