具有行为奇怪的多值参数的存储过程

2024-03-20

我在 SQL Server 中创建了一个存储过程来为 SSRS 提供数据,以使其能够接受多个值。

我已经创建了它,当我在报告中使用它或在 SQL Server 中执行它时,我收到以下错误消息。

消息 207,第 16 层,状态 1,第 35 行
列名称“伦敦”无效。

我有什么遗漏的吗?谢谢

这是我的样本数据。随意用它创建表格

DECLARE @MyTables AS TABLE (ID INT, City VARCHAR(100))

INSERT INTO @MyTables VALUES
(1, 'London'),
(2, 'Chester'),
(3, 'Luton'),
(4, 'New York'),
(1, 'London'),
(2, 'Chester'),
(5, 'Paris'),
(5, 'Paris'),
(2, 'Chester'),
(2, 'Chester')

SELECT * FROM @MyTables

这是我的动态存储过程的代码:

CREATE PROCEDURE dbo.CitiesGroup
    @Cities NVARCHAR(Max) -- this are the parameters
AS
BEGIN
    DECLARE @sqLQuery VARCHAR(MAX)
    DECLARE @AnswersTempTable TABLE 
                              (  
                                  ID INT,
                                  City VARCHAR(250)
                              )
    SET @sqlQuery = 'SELECT ID, City
                     FROM MyTables
                     WHERE CONVERT(nvarchar(Max), City) IN (' + @Cities + ')

                     INSERT INTO @AnswersTempTable
                         EXEC (@sqlQuery)

                     SELECT * FROM @AnswersTempTable'
END

Thanks

EXEC dbo.CitiesGroup 'London'

错误信息:

消息 207,第 16 层,状态 1,第 32 行
无效的列名称“伦敦”


还有另一种方法可以做到这一点。为什么不使用函数拆分参数,而不是将值传递到动态查询中?本文 https://sqlperformance.com/2012/07/t-sql-queries/split-strings写于亚伦·伯特兰 https://stackoverflow.com/users/61305/aaron-bertrand演示如何在 sql server 中拆分字符串的不同方法。

一旦选择了其中一个函数,您就可以简单地重写存储过程,而无需在内部创建动态查询。

CREATE PROCEDURE dbo.CitiesGroup
    @Cities NVARCHAR(Max) -- this are the parameters
AS
BEGIN
    -- simplified query
    -- write your complex logic here
    SELECT ID, City
    FROM MyTables
    WHERE City IN (SELECT Item FROM dbo.SplitStrings_CTE(@Cities, N',');)
END

Usage:

EXEC dbo.CitiesGroup 'London'
GO

EXEC dbo.CitiesGroup 'London,New York,Paris'
GO

有用的链接:

以正确的方式分割字符串——或者次佳的方式 https://sqlperformance.com/2012/07/t-sql-queries/split-strings

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有行为奇怪的多值参数的存储过程 的相关文章

随机推荐

  • Google 地图 API v3 - 鼠标移动和单击事件组合

    如果我将一个单击事件连接到我的地图 然后我连接了一个鼠标移动事件 则单击事件将不再起作用 我想没有人知道这件事吧 顺便说一句 这是 3 4 版本中的 举个简单的例子 var map function initialize var myLat
  • 当 RichTextBox 刚刚加载/为空时,WPF EditingCommands 不起作用?

    这是一个非常简单的代码示例
  • 迁移到.Net Core 3后JsonPatchDocument为空

    我有一个包含多个补丁操作的 AspNetCore WebApi Project 它在 Core 2 2 上运行良好 迁移到 Core 3 后 FromBody JsonPatchDocument
  • 3路快速排序(C实现)

    我试着实施 https github com p1v0t Sort一些算法是使用 C 的纯通用算法 我坚持使用 3 路快速排序 但不知何故 实现没有给出正确的输出 输出几乎已排序 但某些键不在应有的位置 代码如下 提前致谢 include
  • SQL Server:表中的最大行数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我开发的软件在其数据库表之一 SQL Server 版本 8 9 或 10 中存储大量数据 每天大约有 100 000 条记录插入到该表中
  • Ruby 1.9.2 和 Rails 3 无法打开 Rails 控制台

    gkaykck main myApplication rails console usr local lib ruby 1 9 1 irb completion rb 9 in require no such file to load re
  • Java Mail MimeUtility 编码文本 UnsupportedEncodingException BASE64

    作为我的一部分J2EE应用程序的电子邮件服务 我编码成BASE64 body MimeUtility encodeText orig mail body UTF 8 BASE64 但在某些情况下它会抛出异常 java io Unsuppor
  • Powershell替换存储在多个文件夹中的多个文件中的文本

    我想替换多个文件和文件夹中的文本 文件夹名称发生变化 但文件名始终为 config xml fileName Get ChildItem C config app config xml Recurse Get Content fileNam
  • 如何通过 Cloud DNS api 将自定义域映射到应用程序引擎应用?

    是否有任何文档解释如何仅通过 Cloud DNS API 或任何其他 Google Cloud API 将自定义域映射到 App Engine 上托管的应用 我已经为 www my domain com 添加了 CNAME 记录 指向 gh
  • 如何在asp.net中删除.aspx .asmx后缀

    我们的大部分应用程序都是基于asp net 所以所有的 url 都会有后缀 如 aspx 或 asmx 我想知道是否有什么想法可以删除它们 查看以下教程之一 URL路由 ASP Net 4 0 及更高版本 使用 ASP NET 4 Web
  • 使用java下载zip文件?

    我正在使用 Java 从 Web 服务器下载 zip 文件 但不知何故我在每个文件中丢失了大约 2kb 我不知道为什么 因为相同的代码可以很好地处理其他格式 例如文本 mp3 等 任何帮助表示赞赏 这是我的代码 public void do
  • 如何折叠区域中的空白?

    假设我有这个列表文本文件 field1 variable length field variable length field aaaaaa aaaa aaaaaaaaa bbbbbb bbbbbbbbbbbbbbbbbbbb bbbb 我
  • 如何按顺序执行多个方法?

    强制方法按顺序执行的最佳方法是什么 我有三个方法 但我希望方法1在方法2之前完成 然后当方法2完成时 执行方法3 Example void Method1 void Method2 void Method3 self Method1 sel
  • 通话中状态栏如何影响 ViewController 视图大小?

    我试图理解如何view关联到一个UITabBarController UINavigationController or UIViewController当通话状态栏切换时做出反应 我的问题是它们的行为似乎不同 这会给我带来副作用 我制作了
  • 错误:无法启动新线程

    我有一个使用以下配置运行的网站 Django mod wsgi 阿帕奇 在一个用户的请求中 我向另一个服务发送另一个HTTP请求 并通过python的httplib库解决了这个问题 但有时此服务得不到答复的时间太长 并且 httplib 的
  • 通过 URL 自动登录用户

    我每周向网站的注册会员发送一封邮件 其中包含该网站上私人页面的 URL 出于可用性目的 我不希望用户在单击 URL 后必须提供凭据 我正在使用 ASP NET 会员提供程序模型 Question 我如何实现这一点 以便用户可以通过单击专门的
  • 使用传递的参数附加方法后分离事件处理程序

    我需要将参数 在 C 中 传递给事件处理程序 然后能够分离事件处理程序 我附加事件处理程序并传递参数 map MouseLeftButtonUp sender e gt map MouseLeftButtonUp2 sender e sho
  • Python 导入机制

    我有两个相关的 Python 导入 问题 它们很容易测试 但我想要语言定义的答案而不是特定于实现的答案 而且我也对样式 约定感兴趣 所以我在这里问 1 如果模块 A 导入模块 B 模块 B 导入模块 C 模块 A 中的代码是否可以在不显式导
  • 如何获取 Binder 事务缓冲区的内容以进行故障排除

    有没有办法以编程方式或通过调试工具来了解 Binder 事务缓冲区中保存的当前事务 有时 通常在运行数小时 数天后 我的应用程序会崩溃并出现如下错误跟踪 08 30 09 49 57 459 1879 1904 E JavaBinder F
  • 具有行为奇怪的多值参数的存储过程

    我在 SQL Server 中创建了一个存储过程来为 SSRS 提供数据 以使其能够接受多个值 我已经创建了它 当我在报告中使用它或在 SQL Server 中执行它时 我收到以下错误消息 消息 207 第 16 层 状态 1 第 35 行