【问题标题】:How can I use a where statement in my procedure with open quotes inside the select statement already?如何在我的过程中使用 where 语句并在 select 语句中使用开引号?
【发布时间】:2019-09-26 17:42:26
【问题描述】:

在我的程序中,我需要有表格的输入参数,并且我需要能够在我的程序中创建多个选择语句。但是,当我开始添加 WHERE 条件时,它们仅适用于数字条件,即数字 = 1,但它不适用于 text = 'a',因为该语句已经以 ' ' 即 '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' 附近的语法不正确。

【问题讨论】:

  • 使用两个单引号(不是双引号)来表示带引号的字符串中的单引号。即'SELECT... WHERE date = ''date'''。或者更好的是,使用像 @safetablename 这样的变量。话虽如此,您的 proc 不会返回两个数据集。您必须使用UNION 对要返回的所有数据进行 1 次最终选择,或者使用参数来定义在调用 proc 并调用 proc 两次时执行哪个查询,或者创建两个单独的 procs。
  • @Aaron,我采纳了你的第一个建议,效果很好!
  • 很高兴听到这个消息,我会将我的评论移至您可以标记您的问题已回答的答案。如果您遇到任何其他问题,请随意打开另一个

标签: sql-server stored-procedures where-clause multiple-select-query input-parameters


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 2015-09-17
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多