Sql server 执行动态创建的查询时出错
我的存储过程是这样的Sql server 执行动态创建的查询时出错,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我的存储过程是这样的 USE [Workcamps] GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[ph_TshirtReport] @CampCode nvarchar(20) = NULL, @strAddtlCriteria VARCHAR(150) = '' AS DECLARE @strSQL VARCHAR(900) SET
USE [Workcamps]
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ph_TshirtReport]
@CampCode nvarchar(20) = NULL,
@strAddtlCriteria VARCHAR(150) = ''
AS
DECLARE @strSQL VARCHAR(900)
SET @strSQL = 'select distinct [VolID] ,[VolFName] FROM [vTShirtBase] WHERE @CampCode IS NULL OR CampCode=@CampCode'
IF Len(@strAddtlCriteria) > 0
SET @strSQL = @strSQL + ' and ' + @strAddtlCriteria
exec (@strSQL)
USE [Workcamps]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[ph_TshirtReport]
@CampCode = N'14CA11',
@strAddtlCriteria = N'GroupStaff = 0 And TSWithGS = 0 And StaffAtTraining = 0 And MinJobType <> S And Setup = 0'
SELECT 'Return Value' = @return_value
GO
我是这样执行的
USE [Workcamps]
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ph_TshirtReport]
@CampCode nvarchar(20) = NULL,
@strAddtlCriteria VARCHAR(150) = ''
AS
DECLARE @strSQL VARCHAR(900)
SET @strSQL = 'select distinct [VolID] ,[VolFName] FROM [vTShirtBase] WHERE @CampCode IS NULL OR CampCode=@CampCode'
IF Len(@strAddtlCriteria) > 0
SET @strSQL = @strSQL + ' and ' + @strAddtlCriteria
exec (@strSQL)
USE [Workcamps]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[ph_TshirtReport]
@CampCode = N'14CA11',
@strAddtlCriteria = N'GroupStaff = 0 And TSWithGS = 0 And StaffAtTraining = 0 And MinJobType <> S And Setup = 0'
SELECT 'Return Value' = @return_value
GO
我不知道为什么会发生这种情况,有人能指出我做错了什么吗?您需要更改SET@strSQL代码。设置如下:
SET @strSQL = 'select distinct [VolID] ,[VolFName] FROM [vTShirtBase] WHERE ' + @CampCode + ' IS NULL OR CampCode=' + @CampCode
勾选这个:
ALTER PROCEDURE [dbo].[ph_TshirtReport]
@CampCode NVARCHAR(20) = NULL ,
@strAddtlCriteria VARCHAR(150) = ''
AS
DECLARE @strSQL VARCHAR(900)
SET @strSQL = 'Declare @CampCode nvarchar(20) ' + CHAR(13)
SET @strSQL = @strSQL + ' Set @CampCode = ''' + @CampCode + '''' + CHAR(13)
SET @strSQL = @strSQL + ' select distinct [VolID] ,[VolFName] FROM [vTShirtBase] WHERE @CampCode IS NULL OR CampCode= ''' + @CampCode + ''''
IF LEN(@strAddtlCriteria) > 0
SET @strSQL = @strSQL + ' and ' + @strAddtlCriteria
PRINT @strSQL
EXEC (@strSQL)
@A你现在可以试试了。我没有注意到这个变量被使用了两次