Sql server 有没有办法创造一个;变量";在MS SQL Server中
我希望用几个脚本编写一系列查询,但是我希望用户能够输入一些变量,比如年份,然后在查询中使用这些变量作为参数。有没有一种简单的方法可以做到这一点?您可以使用declare语句:Sql server 有没有办法创造一个;变量";在MS SQL Server中,sql-server,Sql Server,我希望用几个脚本编写一系列查询,但是我希望用户能够输入一些变量,比如年份,然后在查询中使用这些变量作为参数。有没有一种简单的方法可以做到这一点?您可以使用declare语句: declare @month int = 7 declare @year int =2018 然后在查询中使用这些选项: ....where month=@month and year=@year 只有在脚本将在同一批中执行时,才能执行此操作。如果您的用户打算直接将这些脚本加载到SSMS中,或者使用命令行客户端(如SQ
declare @month int = 7
declare @year int =2018
然后在查询中使用这些选项:
....where month=@month and year=@year
只有在脚本将在同一批中执行时,才能执行此操作。如果您的用户打算直接将这些脚本加载到SSMS中,或者使用命令行客户端(如SQLCMD)来执行,那么每个脚本文件都将在其自己的批处理中执行,您需要声明变量并在每个脚本文件中设置值
否则,您需要用其他语言编写程序或脚本,以提示用户输入值。您的程序需要知道如何在每个或脚本文件中设置变量值,然后对SQL Server实例执行这些值。要明确这一点:使用
DECLARE
语句声明的变量仅在其声明的“批处理”中有效。“批处理”是SQL Server作为一个整体分析和执行的命令的“提交”。如果变量是在文件中的语句中声明的,并且如果您将文件作为一个整体执行,并且……,则这可能是一个.sql文件的全部内容注意-如果脚本未包含转到
。这个小词GO
不是SQL命令,但它是用于支持脚本的程序(如SSM)的命令。此命令的目的是标记“批次结束”。它告诉程序“提交”,然后开始新的批处理(开始收集语句,直到下一个GO
或文件末尾)
在场景中使用变量的唯一方法是创建一个脚本文件,其中包含“4个或5个不同文件”中的所有命令,并删除每个GO
(至少在变量的声明和使用之间)
如果您需要一个可跨多个批次(和文件)访问的值,则必须将该值存储在表中,并在需要访问该值的每个批次中查询该值(到变量中)。什么样的脚本?你会把这些变量传递给你的脚本吗?我的意思是“.sql”不确定这是否是正确的术语,但我正在对4个或5个不同的“.sql”文件编写查询以进行组织。我想在其中一个上有一个变量,允许我从其余的查询调用它
从其余的查询调用它
-不,不起作用。SQL变量范围仅限于当前批处理。MSSQL中没有“全局变量”(在一般理解中)。XY问题再次出现…我尝试了这个方法并执行了“declare@year int=2017”,但出现了这个错误“必须声明标量变量“@year”。“您可以执行declare@month int declare@year int set@month=7 set@year=2018
或declare@month int=7;宣布@year int=2018年代码>如果您收到“必须声明标量变量@year”消息,则可能您没有声明变量@year,或者您突出显示了要运行的特定代码,但没有突出显示之前的声明代码。