Неправильный ответ на оператор COL_NAME в SQL - PullRequest
0 голосов
/ 20 сентября 2019

У меня проблема с этим утверждением

SELECT GENDER 
FROM tableName 
WHERE (SELECT COL_NAME(OBJECT_ID('[tableName ]'), 5)) = 'M'

Он должен вернуть все ГЕНДЕР из таблицы, где пол равен M, но он ничего не возвращает!

Это то же самоевыберите, но с «классическими» параметрами

SELECT GENDER 
FROM tableName 
WHERE GENDER = 'M'

Я также попытался использовать переменную, но с тем же пустым результатом!

DECLARE @var NVARCHAR(MAX) 
SET @var = (select COL_NAME(OBJECT_ID('[MD_PRODUCT].[TABSOURCE]'), 5))
SELECT GENDER FROM MD_PRODUCT.TABSOURCE WHERE @var = 'M'

Мне нужно использовать COL_NAME (или в качестве альтернативыCOLUMN_NAME (INFORMATION_SCHEMA), потому что все параметры в выделенном списке генерируются динамически ...

Может кто-нибудь мне помочь?

Спасибо

Я работаю с SQL Serverв SSMS

Ответы [ 3 ]

2 голосов
/ 20 сентября 2019

Вы, похоже, ищете динамический SQL.Вам необходимо подготовить запрос в строке и использовать EXEC() для его запуска.

Обратите внимание:

DECLARE @sqlCommand varchar(1000)
DECLARE @columnName varchar(75)
SET @columnName = 'foo'
SET @sqlCommand = 'SELECT GENDER FROM tableName WHERE  ' + @columnName + ' = M'
EXEC (@sqlCommand)
1 голос
/ 20 сентября 2019

Почему в мире вы используете COL_NAME здесь ???Вы должны ссылаться на столбец.

SELECT GENDER 
FROM tableName 
WHERE GENDER = 'M'
0 голосов
/ 20 сентября 2019

Спасибо всем, что нашел решение с помощью ответа GMB.Вот правильный код:

DECLARE @columnName varchar(75)
DECLARE @tableName varchar(75)
declare @sqlCommand varchar(75) 
SET @columnName = (select COL_NAME(OBJECT_ID('tableName'), 1))
set @tableName = 'tableName'
SET @sqlCommand = 'SELECT ' +@columnName+ ' FROM ' +@tableName+ ' WHERE ' +@columnName+ ' = 1'
print @sqlCommand  --just for print out the the sql command variable @sqlCommand
EXEC (@sqlCommand)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...