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你现在可以试试了。我没有注意到这个变量被使用了两次