在 SQL Server 存储过程中动态创建和选择表变量?

2023-12-19

请指导我如何动态创建表变量。我知道它可以是这样的:

DECLARE @people TABLE 
( 
    id INT, 
    name VARCHAR(32) 
);

如果不知道列和数据类型,我将如何创建。场景是我必须根据物理表创建表变量并将数据选择到其中,在 SP 中使用它们,然后将表变量中的数据返回到 C# 程序。

例如我有一张员工表。我想创建一个与 Employyes 具有相同结构的表变量。但提及列需要花费很多时间(因为员工大约有 100 个列)

请指教。


所以这是你如何构建DECLARE TABLE动态声明:

DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';


SELECT @sql = @sql + ',
' + c.name + ' ' + t.name
 + CASE
  WHEN t.name LIKE '%char' OR t.name LIKE '%binary' THEN
   '(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE
   CONVERT(VARCHAR(4), c.max_length/CASE WHEN t.name LIKE 'n%'
   THEN 2 ELSE 1 END) END + ')'
  WHEN t.name IN ('float') THEN
      '(' + CONVERT(VARCHAR(4), c.precision) + ')'
  WHEN t.name IN ('decimal', 'numeric') THEN
   '(' + CONVERT(VARCHAR(4), c.precision) + ','
   + CONVERT(VARCHAR(4), c.scale) + ')'
  ELSE ''
 END
 FROM sys.columns AS c
 INNER JOIN sys.types AS t
 ON c.system_type_id = t.system_type_id
 AND c.user_type_id = t.user_type_id
 WHERE c.[object_id] = OBJECT_ID('dbo.Employees')
 ORDER BY c.column_id;

SET @sql = 'DECLARE @people TABLE (' + STUFF(@sql, 1, 1, '') + '
);';

SELECT @sql;

但现在怎么办?您不能从动态 SQL 范围之外插入:

EXEC sp_executesql @sql;
INSERT @people(id, name) SELECT 1,'foo';

产生此错误:

Msg 1087, Level 15, State 2, ...
Must declare the table variable "@people".

再次涉及范围问题——@people只存在于动态SQL中,一旦完成就不再存在。因此,虽然您可以继续并附加到@sql多变的:

SET @sql = @sql + 'INSERT @people ...; SELECT id, name FROM @people;';

...这很快就会失控。我仍然不知道你的 C# 代码如何知道涉及的所有列和数据类型,但是编写 SQL 来做到这一点太难了...你知道你可以将列节点从对象资源管理器拖到查询上窗口,它会为您生成一个漂亮的以逗号分隔的列名称列表,对吧?

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

在 SQL Server 存储过程中动态创建和选择表变量? 的相关文章

  • 独立对列进行排序,使得所有空值都位于每列的最后

    这是一个名为的示例表animal name color fox brown fox red dog gold 现在 我想要的是这样的结果 fox dog brown gold red 名称应该是结果的列 不同颜色值作为行 我的第一个想法是
  • 在 Sql Server 中转换为日期时间 MM/dd/yyyy HH:mm:ss

    如何将给定的日期格式转换为MM dd yyyy HH mm ss 我尝试了下面这个但没有实现 谁能帮我 SELECT CONVERT VARCHAR 20 GETDATE 120 SQL Server 2005及以上版本支持 SELECT
  • 是否有适用于所有数据库的标准sql

    如下所示 不同数据库的语法有所不同 是否存在适用于所有数据库的标准方法 有没有什么工具可以将任意sql转换为任意sql SQL Server 2005 CREATE TABLE Table01 Field01 int primary key
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下
  • 跨多个表进行搜索,并在结果行中显示表名称

    如何构建 SQL 语句以跨多个平面不相关的表运行 并使用选择结果和结果来自的表的名称显示结果 这种情况是这样的 我有几个表 每个表都有相同的列名 这是我从外部各方收到的数据 并将其存储在不同的表中 相同的表看起来像 Table 1 pid
  • 重命名重复行

    这是我的问题的一个简化示例 我有一个表 其中有一个包含重复条目的 名称 列 ID Name 1 AAA 2 AAA 3 AAA 4 BBB 5 CCC 6 CCC 7 DDD 8 DDD 9 DDD 10 DDD 进行 GROUP BY 操
  • 使用 ADODB 连接从关闭的工作簿中检索数据。某些数据被跳过?

    我目前正在编写一些代码 可以通过 ADODB 连接访问单独的工作簿 由于速度的原因 我选择了这种方法而不是其他方法 下面是我的代码 Sub GetWorksheetData strSourceFile As String strSQL As
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • 如何 md5 所有列(无论类型如何)

    我想创建一个 sql 查询 或 plpgsql 它将 md5 所有给定的行 无论类型如何 但是 在下面 如果 1 为空 则哈希为空 UPDATE thetable SET hash md5 accountid accounttype cre
  • 实体框架 - SQL Server 2005 - IIS 服务器日期时间问题

    我正在使用 MVC3 和实体框架 在我的应用程序中 我需要通过 EF 调用 SQL Server 2005 中的存储过程来根据以下内容搜索一些数据datetime传递的参数 在当地环境中一切似乎都运行良好 但是将其托管到 IIS 后 我在尝
  • 内连接不重复,可以吗?

    鉴于这两个表 表 A1 有两行具有相同的值 a A1 a a 表 A2 有两行主键值为 A B 它们与 a 关联 A2 PK col2 A a B a 我想要的是 A1 和 A2 的连接并得到这个结果 a A a B 显然内连接在这里不起作
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • 如何使用sql作为xml路径('')但保留回车符

    我有下面的代码 select select cast Narrative as Varchar max char 13 from officeclientledger where ptmatter matter and ptTrans 4
  • 临时表是线程安全的吗?

    我正在使用 SQL Server 2000 它的许多存储过程广泛使用临时表 数据库的流量很大 我担心创建和删除临时表的线程安全性 假设我有一个存储过程 它创建了一些临时表 它甚至可以将临时表连接到其他临时表等 并且还可以说两个用户同时执行存
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • VB6+SQL-Server:如何使用 ADODB.Command 执行带有命名参数的查询?

    我一直在尝试使用 ADODB Command 执行参数化查询 我知道我可以使用 对于参数 但我的查询相当大 我真的不想跟踪参数的确切顺序 我尝试了类似以下的操作 objCmd CommandType adCmdText objCmd Com

随机推荐

  • 如何使用 Modernizr 使 border-radius 在 IE8 中工作?

    我知道有很多关于在 IE8 中获取圆角的文章 我的问题是 如何使用Modernizr支持CSS3 HTML5功能 例如 为了在 IE8 中显示圆角 我使用 CSS 3 属性 webkit border radius 20px moz bor
  • 如何在React Native Android中添加自定义字体

    我想设置fontFamily到 roboto 精简我的工具栏标题 我已经添加了roboto Thin ttfassets fonts我的 android 项目的文件夹 但是它似乎在运行应用程序时产生问题 我在运行时遇到这个问题 反应本机启动
  • java cpu使用率监控

    有没有办法使用纯Java来监控CPU使用率 kgiannakakis 链接的文章评论中有一个宝石 javasysmon https github com jezhumble javasysmon wiki JavaSysMon 管理进程和
  • Discord.js V13 发送消息附件

    升级到discord js v13并使用后Array from message attachments values 代替message attachments array 发送消息中的附件 message client channels
  • AWS API Gateway 缓存忽略查询参数

    我正在 AWS API Gateway 端配置缓存以提高 REST API 的性能 我尝试配置的端点正在使用查询参数 我已经在 AWS API Gateway 端启用了缓存 但不幸的是 我发现它在构建缓存键时忽略了查询参数 例如 当我使用查
  • 如何启用 Guard Malloc

    这是一个愚蠢的问题 文档说 要使用 Guard Malloc 启用调试 请在运行项目之前在 Xcode 中选择 运行 gt 启用 Guard Malloc 选项 启用此选项后构建并运行您的应用程序会自动使用 Guard Malloc 库运行
  • 默认 MVC 5 应用程序的安全异常

    将 VS 2013 生成的默认 MVC 5 应用程序部署到我的托管帐户时 我遇到了安全异常 对于这个问题有什么快速的解决办法吗 Description The application attempted to perform an oper
  • Yii2:在字段模糊时禁用 ActiveForm Ajax 验证

    如何自动禁用 Yii validation onblur ajax 验证 我只想在按下提交按钮后进行验证 您想使用enableAjaxValidation验证您的表单 同时不希望在每个表单上触发 ajax 验证blur当您输入该字段后 您只
  • _NET_WM_ICON 的图片格式

    环境 Ubuntu 16 04 在我的应用程序中 我通过调用获取应用程序的图标XGetWindowProperty with NET WM ICON atom unsigned char data XGetWindowProperty da
  • 对空结果集的非法操作[重复]

    这个问题在这里已经有答案了 我正在尝试在一家杂货店建立一个收银台 我的代码实际上执行了我想要它做的事情 但有一点是这样的 在我要求用户输入他们想要的商品数量后 产品信息被收集并且工作正常 但是当它应该要求用户输入下一个产品的产品 ID 时
  • 如何获取视频的完整时长和当前播放时长?

    我需要使用 swift 创建一个自定义视频插件 但我不知道如何获取视频的完整持续时间和当前播放时间 在我的控制台中刚刚出现了这个输出 C CMTime 我不确定我的代码有什么问题 My code let url NSBundle mainB
  • JSF 2.2 SelectManyCheck 破坏了 javascript

    它曾经在 jsf 2 0 上完美工作 但知道它会在屏幕末尾呈现一个框 其中包含一个包含位置数据的 html 表 如果我删除转换器 则 selectmany 复选框有效 但它仍然呈现该框
  • Jupyter输入、显示、打印执行顺序混乱

    我使用的是 Jupyter Python 版本是 3 5 在我的while循环 执行顺序不正确 这input显示了一次迭代的结果before决赛print上一次迭代的 这是我的代码 from IPython display import d
  • 如何检查变量是否为数值?

    PHP PDO 的lastInsertId 方法实际上返回一个数值 但它也可能返回一些完全不同的东西 比如一些奇怪的SQLSTATE 代码或其他什么 无论如何 它返回的不是数值 我想记录一个错误 有没有办法安全地检查这一点 Use is i
  • 为什么不能使用 WebCrypto 导出 HKDF 密钥?

    我想获取密码并通过 PBKDF2 运行它来创建主密钥 然后我想通过 HKDF 运行它来创建多个密钥 好像crypto subtle deriveKey不会接受 HKDF 作为derivedKeyAlgorithm 换句话说 我无法让这样的事
  • 在JSF页面中显示HashMap条目的键和值

    我想显示HashMapJSF UI 中的键及其关联值 我怎样才能实现这个目标 我如何迭代HashMap在 JSF 页面中使用一些迭代器组件 例如
  • 在 OSX 10.9.1 上安装 Google Cloud SDK 时遇到问题

    这里是个新手 我正在尝试按照此处的指南安装 GC SDK https developers google com compute docs gcutil https developers google com compute docs gc
  • 我收到错误:配置“编译”已过时,已被“实现”替换。将于2018年底删除

    更新 Android Gradle 插件和 Android Studio 后出现此错误 我已经检查过这个问题 Android Studio build gradle 警告消息 https stackoverflow com question
  • 重置类时 CSS 动画不会重新启动

    我正在使用CSS着色器 动画 我的着色器类定义如下 shader webkit filter custom url v vs mix url f fs multiply destination over 200 200 webkit ani
  • 在 SQL Server 存储过程中动态创建和选择表变量?

    请指导我如何动态创建表变量 我知道它可以是这样的 DECLARE people TABLE id INT name VARCHAR 32 如果不知道列和数据类型 我将如何创建 场景是我必须根据物理表创建表变量并将数据选择到其中 在 SP 中