Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/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
Sql 即席查询将结果分配给局部变量_Sql_Sql Server 2005_Tsql - Fatal编程技术网

Sql 即席查询将结果分配给局部变量

Sql 即席查询将结果分配给局部变量,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,嗨,我有可能这样做吗?当我运行该语句时,我得到一个异常,@Price\u Plan没有被删除,因此很明显,临时查询没有访问@Price\u Plan的范围。是否有一种变通方法或更好的方法来查询每次执行此查询时名称都会更改的表 DECLARE @Price_Plan varchar(3), @MNP_Network varchar(3), @GSM_Code varchar(3), @GEO_Dist varchar(6), @Call_ProdNo varchar(7), @Ca

嗨,我有可能这样做吗?当我运行该语句时,我得到一个异常,@Price\u Plan没有被删除,因此很明显,临时查询没有访问@Price\u Plan的范围。是否有一种变通方法或更好的方法来查询每次执行此查询时名称都会更改的表

DECLARE @Price_Plan varchar(3), @MNP_Network varchar(3), @GSM_Code varchar(3), @GEO_Dist varchar(6),
        @Call_ProdNo varchar(7), @Call_Time datetime, @CallId int, @dtl_call_dur int,
        @Volume varchar(10), @Call_Cost int

--Assume CallId has a value

SET @Sql =
    'SELECT
        @Price_Plan = Price_Plan, @MNP_Network = MNP_Network, @GSM_Code = GSM_Code, @GEO_Dist = GEO_Dist,
        @Call_ProdNo = Call_ProdNo, @Call_Time = Call_Time, @dtl_call_dur = dtl_call_dur,
        @Volume = Volume
     FROM ' + @TableName + ' 
     WHERE CallId = ' + CONVERT(varchar(10),@CallId) + ''
    PRINT  @SQL
    EXEC (@Sql)

你确定这就是这个错误吗?我测试了该查询,它返回了两个错误:

- Not declared @TableName
- Not declared @Sql
当您声明这些变量时,它应该可以正常工作

但更好的方法是使用

例如:

EXEC sp_executesql 
      N'SELECT * FROM AdventureWorks.HumanResources.Employee 
      WHERE ManagerID = @level',
      N'@level tinyint',
      @level = 109;
第一个参数是带参数的查询,第二个参数是带逗号分隔类型的参数名称,然后是参数的实际值

编辑:

下面是使用输出参数的另一个示例:

DECLARE @retCnt INT

EXEC sp_executesql 
    N'SELECT @retCnt = COUNT(*) FROM sys.tables',
    N'@retCnt INT OUTPUT',
    @retCnt = @retCnt OUTPUT

SELECT @retCnt

在我的电脑上选择return 5。

您确定这是错误吗?我测试了该查询,它返回了两个错误:

- Not declared @TableName
- Not declared @Sql
当您声明这些变量时,它应该可以正常工作

但更好的方法是使用

例如:

EXEC sp_executesql 
      N'SELECT * FROM AdventureWorks.HumanResources.Employee 
      WHERE ManagerID = @level',
      N'@level tinyint',
      @level = 109;
第一个参数是带参数的查询,第二个参数是带逗号分隔类型的参数名称,然后是参数的实际值

编辑:

下面是使用输出参数的另一个示例:

DECLARE @retCnt INT

EXEC sp_executesql 
    N'SELECT @retCnt = COUNT(*) FROM sys.tables',
    N'@retCnt INT OUTPUT',
    @retCnt = @retCnt OUTPUT

SELECT @retCnt

在我的计算机上选择return 5。

我刚刚从更大的过程中复制并粘贴了查询的一部分,无论如何,我试图解决的问题是,我需要将@Price_计划分配给临时查询返回的值,这应该是一行。我使用输出参数添加了另一个示例。看看这个。这应该是您需要的。我可以将表指定为参数吗?我已经尝试过了,但没有成功,我会尝试更多,只是想知道存储过程是否支持它。您可以连接查询字符串:“SELECT*FROM”+@tablename我刚刚从更大的过程中复制并粘贴了查询的一部分,我试图解决的问题是,我需要将@Price_计划分配给临时查询返回的值,该值应该是一行。我已经使用输出参数添加了另一个示例。看看这个。这应该是您需要的。我可以将表指定为参数吗?我已经尝试过了,但是没有成功,我将尝试更多,只是想知道存储过程是否支持它。您可以连接查询字符串:“SELECT*FROM”+@tableName