【问题标题】:Script Validation in sql serversql server 中的脚本验证
【发布时间】:2015-11-13 18:08:52
【问题描述】:

我在脚本文件中有一堆插入...选择语句,如下格式。

insert into 
tablename
(
col1,
col2,
...
...
coln
)
select
col1,
col2,
...
coln
from 
table2

我的文件包含大约 3000 个插入...选择语句。我想根据以下内容验证脚本。

  1. insert 和 select 语句中提到的列数应该相同
  2. 插入和选择中的列名应该匹配。

我正在手动扫描插入脚本,但这是一项耗时的任务,我不知道何时完成。

请提出任何想法以有效地完成此过程。

【问题讨论】:

  • 我会使用 Python 或一些类似的语言来解析和验证它;应该很容易。
  • 这个文件没有语法错误,但是有很多不匹配的列,例如 (insert into tablename (col1,col2) select col4,col2 from tablename。在这个语句中 col4 与 col1 映射插入。我必须识别那些脚本。
  • 这可能会帮助你MERGE INTO [dbo].[UserUserRole] AS Target USING (VALUES (1, 1) ) AS Source ([UserID], [RoleID]) ON Target.[UserID] = Source.[UserID] AND Target.[RoleID] = Source.[RoleID] WHEN NOT MATCHED BY TARGET THEN -- Insert new rows INSERT ([UserID], [RoleID]) VALUES ([UserID], [RoleID]);
  • tinka是对的,可以合并
  • 给我一个示例,因为我无法遵循这个逻辑

标签: sql sql-server sql-server-2008


【解决方案1】:

在 SSMS 中,您可以查看估计的查询计划。如果有不正确的地方,它会显示出来。

您还可以在脚本开始时将 NOEXEC 设置为开启。

编译每个查询但不执行它。 MSDN: SET NOEXEC (Transact-SQL)

SET NOEXEC ON

【讨论】:

  • 我必须找出脚本中不匹配的列,但这会检查语法错误
  • 这个文件没有语法错误,但是有很多不匹配的列,比如(insert into tablename (col1,col2) select col4,col2 from tablename)。在此语句中 col4 与插入中的 col1 映射。我必须识别那些脚本
  • 它至少会告诉你列数是否不同 => 1. insert 和 select 语句中提到的列数应该相同
  • 对不起,我没能找到你。能否请您简要介绍一下
  • 你说insert和select语句中的列数应该是一样的。如果它们不相同,则会出现错误:INSERT 语句的选择列表包含的项比插入列表多
猜你喜欢
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 2015-01-26
  • 2020-09-09
相关资源
最近更新 更多