0

在我的过程中,我需要有表格的输入参数,并且我需要能够在我的过程中创建多个选择语句。但是,当我开始添加 WHERE 条件时,它们仅适用于数字条件,即其中 number = 1,但它不适用于 text = 'a',因为该语句已经以 ' ' ie 'select...' 打开(请参阅编码)

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

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

(问题是日期在哪里)

输出如下:

消息 102,级别 15,状态 1,第 23 行
“00”附近的语法不正确。

(受影响的 53 行)

我尝试将 where 子句与单独的 ' ' 分开,但没有用。

我尝试在 ' ' 内使用 " 但没有用,并说 '无法识别列名'

我试图将文本视为没有''但没有用的数字。

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'

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

基本上两个单独的查询基于我输入表名作为输入参数的过程

相反,错误消息是:

消息 102,级别 15,状态 1,第 23 行
“00”附近的语法不正确。

4

1 回答 1

1

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

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

或者更好的是,使用像你这样的变量 for @safetablename

话虽如此,您的 proc 不会返回两个数据集。您必须使用 aUNION对要返回的所有数据进行 1 个最终选择,或者使用参数来定义在调用 proc 并调用 proc 两次时执行哪个查询,或者创建两个单独的 procs。

于 2019-09-26T18:13:15.403 回答