【发布时间】:2019-02-22 17:43:44
【问题描述】:
我创建了下表:
CREATE TABLE TestABC (
colID INT NOT NULL,
colName VARCHAR(10) NULL,
);
INSERT INTO TestABC
(colID, colName)
VALUES
(1,'ABC'),
(2,'DEF'),
(3,'GHI');
当我对上表运行以下查询时...
DECLARE @Name varchar(max)
select @Name = colName from dbo.TestABC where colID = '3'
print @Name
我得到以下预期结果,这很好:
GHI
现在,我正在尝试在动态 SQL 中传递带有 @Name 参数的 SELECT:
DECLARE @sql varchar(max)
DECLARE @Name varchar(max)
set @sql = '
select ' + @Name + ' = colName from dbo.TestABC where colID = ''3''
'
print @sql
我遇到的问题是,在动态 SQL 中,我的 @Name 参数没有得到评估并导致空白或 NULL。另外,我的整个动态 sql 参数 @sql 也以 NULL 结尾。
我完全意识到,如果我在动态 SQL 之前添加以下附加行,则应该正确评估 @Name...
SELECT @Name = colName from dbo.TestABC
但是,这不是我的目标。我需要 SELECT 是完全动态的,因为我最终将动态传递我的 dbo.TestABC。因此,我不能像上面的 SELECT 那样预先分配我的 @Name 参数。
如何在动态 SQL 中的 SELECT 中填充 @Name 和 @sql 参数?
【问题讨论】:
-
为什么这需要是动态的?如果您尝试执行作业,则该语句没有任何动态。要回答为什么你得到
NULL,那是因为你的语句评估为set @sql = 'select ' + NULL + ' = colName from dbo.TestABC where colID = ''3''',并将NULL连接到一个字符串=NULL。 -
@Larnu,它需要是动态的,因为我将在我的整体逻辑中动态地传递我的表格。
-
也许最好包含你的全部逻辑? :)
标签: sql-server tsql parameter-passing dynamic-sql sql-server-2017