【发布时间】: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