Sql server sql server存储过程sp_executesql
我有这个存储过程Sql server sql server存储过程sp_executesql,sql-server,stored-procedures,Sql Server,Stored Procedures,我有这个存储过程 USE [all_things] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_getThingsByType] @thingid int, @typeid int AS DECLARE @Sql NVARCHAR(MAX) = 'SELECT * from items' IF @thingid IS NOT NULL BEGIN SET @S
USE [all_things]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_getThingsByType]
@thingid int,
@typeid int
AS
DECLARE @Sql NVARCHAR(MAX) = 'SELECT * from items'
IF @thingid IS NOT NULL
BEGIN
SET @Sql += ' where thingid = @thingid'
END
IF @typeid IS NOT NULL
BEGIN
SET @Sql += ' and TypeID = @typeid'
END
EXEC sp_executesql @sql, N'@thingid int,@typeid int',@thingid=@thingid,@typeid=@typeid;
测试用例:
thingid
为null
和typeid
为null
运行它时,我得到了所有完美的结果thingid
并且typeid
为null
时,结果正常thingid
为null
并提供了typeid
。所有的东西都被归还了谢谢谢谢@tschmit007,我把它修好了
USE [all_things]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_getThingsByType]
@thingid int,
@typeid int
AS
DECLARE @Sql NVARCHAR(MAX) = 'SELECT * from items'
IF @thingid IS NOT NULL
BEGIN
SET @Sql += ' where thingid = @thingid'
END
IF @typeid IS NOT NULL AND @thingid IS NOT NULL
BEGIN
SET @Sql += ' and TypeID = @typeid'
END
IF @typeid IS NOT NULL AND @thingid IS NULL
BEGIN
SET @Sql += ' where TypeID = @typeid'
END
EXEC sp_executesql @sql, N'@thingid int,@typeid int',@thingid=@thingid,@typeid=@typeid;
多亏了@tschmit007,我把它修好了
USE [all_things]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_getThingsByType]
@thingid int,
@typeid int
AS
DECLARE @Sql NVARCHAR(MAX) = 'SELECT * from items'
IF @thingid IS NOT NULL
BEGIN
SET @Sql += ' where thingid = @thingid'
END
IF @typeid IS NOT NULL AND @thingid IS NOT NULL
BEGIN
SET @Sql += ' and TypeID = @typeid'
END
IF @typeid IS NOT NULL AND @thingid IS NULL
BEGIN
SET @Sql += ' where TypeID = @typeid'
END
EXEC sp_executesql @sql, N'@thingid int,@typeid int',@thingid=@thingid,@typeid=@typeid;
嗯,如果thingid为null,而不是typeid,那么您就有一个格式不正确的查询,看起来是
select*from items和typeid=@typeid
。我没有看到。Thanksimho,如果thingid为null,而不是typeid,则会出现一个格式不正确的查询,看起来是select*from items和typeid=@typeid
。我没有看到这一点。谢谢