Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 为什么我的查询提交错误?_Tsql - Fatal编程技术网

Tsql 为什么我的查询提交错误?

Tsql 为什么我的查询提交错误?,tsql,Tsql,对于作业,我必须做以下几点 编写一个脚本,安全地检查某个区域是否存在: 声明名为Space的自定义区域@region,类型为NVARCHAR(25)。 如果不存在,则使用,否则,然后开始..结束以: 使用throw 50001'error!'抛出错误,0如果不存在RegionDescription与@region匹配的记录。 如果记录确实存在,请从区域表中选择该区域的所有列。 注: 将区域表指定为Region,而不是dbo.Region。 使用SELECT*FROM Regionwhere 我写

对于作业,我必须做以下几点

编写一个脚本,安全地检查某个区域是否存在:

声明名为
Space
的自定义区域
@region
,类型为
NVARCHAR(25)
。 如果不存在,则使用
,否则,然后开始..结束
以:

使用
throw 50001'error!'抛出错误,0
如果不存在RegionDescription与
@region
匹配的记录。 如果记录确实存在,请从区域表中选择该区域的所有列。 注:

将区域表指定为
Region
,而不是
dbo.Region
。 使用
SELECT*FROM Region
where

我写的查询不知何故是不正确的,但我不知道哪里错了:

DECLARE @region NVARCHAR(25)='Space'

IF NOT EXISTS (SELECT * FROM Region WHERE RegionDescription = @region)
BEGIN
  THROW 50001, 'Error!', 0;
  END
ELSE 
BEGIN
(SELECT * FROM Region WHERE RegionDescription = @region)
END

我认为你的问题是正确的。它输出“Error!”,因为如果表中不存在名为“Space”的区域,它应该这样做。尝试在表中插入一行,其中包含名为“Space”的RegionDescription,然后您的查询应该输出该行

也许问题仅仅在于您没有名为Region的表。如果这是真的,那么您应该从创建这个表开始。该表必须有一些列,其中一列应称为RegionDescription


如果这对您没有帮助,请说明您收到的错误消息。

这是我编写的查询,已成功提交。不知道两者有什么不同

DECLARE @region NVARCHAR(25)='Space'

IF NOT EXISTS (Select * From Region WHERE RegionDescription=@region)
BEGIN
    THROW 50001,'error!',0;
    END
ELSE
BEGIN
(SELECT * from Region Where RegionDescription=@region)
END

我认为你应该解雇给你这个作业的人,因为他们教坏习惯。省略模式限定符是一种不好的做法,而且在
抛出之后使用
else
也没有意义-无论如何,在
抛出之后,代码永远不会前进。此外,这种类型的查询可能会有人从两个select语句之间的表中删除记录。它应该包装在一个具有可序列化隔离级别的显式事务中,以保护它。从我所看到的情况来看,您编写的查询与需求完美匹配,尽管需求存在缺陷。也许这是一件愚蠢的事情,因为您需要更准确地理解它?他们询问“记录是否存在”,而您检查“记录是否不存在”。根据需求,您的代码可以正常工作并看起来正确。不知道他们为什么说这不正确。如果他们真的很挑剔,那么在你的ELSE中,你不需要在select周围加上括号,但这两种方法都可以,而且他们可能不希望你使用“select*”并希望列出来。除此之外,我不确定。或者他们希望有另一种方法?可能通过使用
@@ROWCOUNT
?示例:为什么您说您的查询不正确?请具体点,谢谢。我没有收到具体的错误消息。只是我提交的答案不正确..只有一个名为dbo.Region的表,有两列:RegionID RegionDescription 1 Eastern 2 Western 3 Northern 4他们可能希望您更明确地了解Unicode数据类型。您可以这样写第一行:DECLARE@region NVARCHAR(25)=N'Space'查询不会抛出错误。它只显示一行受影响。