Как я могу использовать оператор where в моей процедуре с уже открытыми кавычками внутри оператора select? - PullRequest
0 голосов
/ 26 сентября 2019

В моей процедуре мне нужно иметь входные параметры для таблицы, и я должен быть в состоянии сделать несколько операторов выбора в моей процедуре.Однако, когда я начал добавлять условия WHERE, они работали только с числовыми условиями, то есть, где число = 1, но это не работает для text = 'a', поскольку оператор уже открывается с помощью '' т.е. 'select ...' (см.код)

Таким образом, условия текста конфликтуют с открывающей кавычкой.

Так как мне добавить это оператор where в отношении текста?

(Проблема в том, где дата)

Вывод следующий:

Сообщение 102, Уровень 15, Состояние 1, Строка 23
Неверный синтаксис рядом с '00'.

(затронуто 53 строки)

Я пыталсяразделите предложение where с помощью «», но без использования.

Я пытался использовать «внутри», но безрезультатно, и говорит «имя столбца не распознано»

Я пытался трактовать текст как числовой без «», но нетuse.

CREATE PROCEDURE AllRowsAndCount35
    @table1 NVARCHAR(128)
AS
BEGIN
    DECLARE @SafeTableName AS NVARCHAR(128)

    SELECT @SafeTableName = QUOTENAME(TABLE_NAME)
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME = @table1

    DECLARE @sql AS NVARCHAR(MAX) = 'select  count(*) as countrows from ' + @SafeTableName + 'where valid_from_etl = 2019-06-24 00:00:00.000'

    EXEC(@SQL)

    DECLARE @sql2 AS NVARCHAR(MAX) = 'select  * from ' + @SafeTableName 

    EXEC(@SQL2)
END 

EXEC AllRowsAndCount35 'Dim_Cluster'

Я хотел бы, чтобы результат показывал количество строк, другой отдельный результат, показывающий всю таблицу

В основном два отдельных запроса, основанные на процедуре, в которой я ввожу имя таблицы каквходной параметр

Вместо этого сообщение об ошибке:

Msg 102, Уровень 15, Состояние 1, Строка 23
Неверный синтаксис рядом с '00'.

1 Ответ

0 голосов
/ 26 сентября 2019

Используйте две одинарные кавычки (не двойные), чтобы представить одинарную кавычку внутри строки в кавычках.

Например: 'SELECT... WHERE date = ''date'''

Или еще лучше, использовать переменную, как вы для @safetablename.

Тем не менее, ваш прок не будет возвращать оба набора данных.Вам придется использовать UNION, чтобы сделать 1 окончательный выбор со всеми данными, которые вы хотите вернуть, или использовать параметры, чтобы определить, какой запрос выполняется при вызове proc, и дважды вызывать proc, или сделать два отдельных процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...