是否可以在 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