Создайте динамическое выражение c SQL Where, в котором обе части инструкции where передаются в параметрах? т.е. где переменная1 = переменная2 - PullRequest
0 голосов
/ 17 февраля 2020

Я видел много примеров динамических c, где предложения, но ни один из них никогда не освещал проблему, с которой я столкнулся. Это вообще возможно?

Create Procedure ManualParse2
    (
        @Variable1 AS nvarchar(MAX) 
        ,@Variable2 AS nvarchar(MAX)
    )
AS
    Select * 
    From Faculty
    Where @Variable1
        Case
            When @Variable1 = 'Department' THEN Department
            When @Variable1 = 'Name' THEN Name
            When @Variable1 = 'Gender' THEN Gender
            When @Variable1 = 'FacultyID' THEN FacultyID
        END
        = @Variable2

EXEC ManualParse2 @Variable1 = 'Gender', @Variable2 = 'Male'

1 Ответ

2 голосов
/ 17 февраля 2020

Чтение между строк, но я подозреваю , что вы на самом деле хотите:

CREATE PROC dbo.ManualParse2 @ColumnName sysname, @ColumnValue nvarchar(50) AS --You aren't going to have a department with 1 billion characters in it
                                                                               --sysname is the correct data type for object names (it's a synonym for nvarchar(128) NOT NULL)
BEGIN

    DECLARE @SQL nvarchar(MAX),
            @CRLF nchar(2) = NCHAR(13) + NCHAR(10);
    SET @SQL = N'SELECT *' + @CRLF + --This should reallty be a column list
               N'FROM dbo.Faculty' + @CRLF +
               N'WHERE ' + QUOTENAME(@ColumnName) + N' = @ColumnValue;';

    --PRINT @SQL; --Unlikely to be needed for such a simple statement, but your debugging friend    
    EXEC sp_executesql @SQL, N'@ColumnValue nvarchar(50)', @ColumnValue;
END;
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...