是否可以在 VARCHAR 变量中包含的 sql 查询内的过程中使用局部表变量? [英] Is it possible to use local table variables in a procedure inside an sql query contained in a VARCHAR variable?

查看:28
本文介绍了是否可以在 VARCHAR 变量中包含的 sql 查询内的过程中使用局部表变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

DECLARE @temp_table_1 TABLE (id int identity(0, 1), col_1 varchar(50)), 
        @txtVar VARCHAR(MAX)

INSERT INTO @temp_table_1
  SELECT col_1 FROM table_1  -- This table_1 is a real table in the database.

Set @txtVar = 'SELECT * FROM @temp_table_1'

EXECUTE (@txtVar)

我得到的错误是

声明变量@temp_table_1.

Declare variable @temp_table_1.

我该如何解决这个问题?

How can I fix this?

推荐答案

Set @txtVar = 'SELECT * FROM myTable WHERE column_value=''' + @var1 + ''''

这篇文章将帮助您了解动态 sql 的基本概念.

This article will help you get a basic ideas of dynamic sql.

编辑
不能在动态查询中使用表变量.
您必须使用临时表或 使用自定义表格类型.

临时表

 CREATE TABLE #temp_table_1 
  ( 
     id    INT IDENTITY(0, 1), 
     col_1 VARCHAR(50) 
  ) 

DECLARE @txtVar VARCHAR(MAX) 

INSERT INTO #temp_table_1 


SELECT col_1 
FROM   table_1 -- This table_1 is a real table in the database. 
SET @txtVar = 'SELECT * FROM  #temp_table_1' 

EXECUTE (@txtVar) 

DROP TABLE #temp_table_1 

自定义表格类型

CREATE TYPE DefaultTable AS TABLE (ID INT IDENTITY(0, 1), COL_1 VARCHAR(50))
GO

-- Fill a var of that type with some test data
DECLARE @MyTable DefaultTable
INSERT @MyTable 
SELECT col_1 FROM table_1 -- This table_1 is a real table in the database.

-- Now this is how you pass that var into dynamic statement
EXECUTE sp_executesql N'SELECT * FROM @MyTable', 
    N'@MyTable DefaultTable READONLY', 
    @MyTable

这篇关于是否可以在 VARCHAR 变量中包含的 sql 查询内的过程中使用局部表变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆