如何在 select 语句中使用带有开引号的过程中的 where 语句?

How can I use a where statement in my procedure with open quotes inside the select statement already?

在我的程序中,我需要为 table 输入参数,并且我需要能够在我的程序中创建多个 select 语句。然而,当我开始添加 WHERE 条件时,它们只适用于数字条件,即 number = 1,但它不适用于 text = 'a' 因为语句已经以 ' ' 打开,即 'select...' (见代码)

因此文本条件与左引号冲突。

那么如何添加关于文本的 where 语句?

(问题是日期在哪里)

输出如下:

Msg 102, Level 15, State 1, Line 23
Incorrect syntax near '00'.

(53 rows affected)

我尝试用单独的“ ”分隔 where 子句,但没有用。

我试过在 ' ' 中使用 " 但没有用,并说 'column name not recognised'

我曾尝试将文本视为不带“ ”的数字,但没有用。

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'

我想要一个显示行数的结果,另一个单独的结果显示整个 table

基本上是两个独立的查询,基于我输入 table 名称作为输入参数的过程

相反,错误消息是:

Msg 102, Level 15, State 1, Line 23
Incorrect syntax near '00'.

使用两个单引号(不是双引号)来表示带引号的字符串中的单引号。

例如:'SELECT... WHERE date = ''date'''

或者更好的是,像 @safetablename 一样使用变量。

总而言之,您的过程不会 return 两个数据集。您必须使用 UNION 将 1 final select 与您想要 returned 的所有数据一起使用,或者使用参数来定义调用 proc 时执行哪个查询并调用proc 两次,或者制作两个单独的 procs。