Sql Case Statement, когда не равно NULL - PullRequest
5 голосов
/ 01 февраля 2012

Я хочу генерировать объявление переменных динамически в зависимости от таблицы. Я имею в виду, я хочу объявить переменные таблицы, каждая переменная должна быть того же типа, что и ее столбец Я делаю что-то подобное, но результат работает, только если тип не является INT

Select 'Declare @Doc' + COLUMN_NAME + ' '+DATA_TYPE+case(CHARACTER_MAXIMUM_LENGTH) when Null then ' '  else '(' +convert(varchar(12),CHARACTER_MAXIMUM_LENGTH) + ')' end 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'Documentos'

И мой результат такой

(No column name)
NULL
Declare @DocSerie varchar(5)
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
Declare @DocImporteLetras varchar(255)
Declare @DocMotivos text(2147483647)
NULL
Declare @DocDocumentosReferencia varchar(255)
NULL
NULL
Declare @DocAuditoriaIPC varchar(40)
NULL
NULL
Declare @DocAuditoriaIPM varchar(40)
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

Ответы [ 2 ]

14 голосов
/ 01 февраля 2012

CASE x WHEN null THEN совпадает с CASE WHEN x = null THEN.Но ничто в этом смысле не равно нулю.Это означает, что вы всегда получаете ELSE часть вашего заявления CASE.А это значит, что вы пытаетесь объединить строку с NULL, что всегда приводит к NULL.

Вам нужно CASE WHEN x IS NULL THEN вместо ...

SELECT
  'Declare @Doc'
  + COLUMN_NAME + ' '
  + DATA_TYPE
  + CASE WHEN (CHARACTER_MAXIMUM_LENGTH) IS Null then ' '  else '(' convert(varchar(12),CHARACTER_MAXIMUM_LENGTH) + ')' end 
FROM
  INFORMATION_SCHEMA.COLUMNS 
WHERE
  TABLE_NAME = 'Documentos'
2 голосов
/ 01 февраля 2012

Объединение

SELECT 'Declare @Doc'
  + COLUMN_NAME + ' '
  + DATA_TYPE + Coalesce('(' + CHARACTER_MAXIMUM_LENGTH + ')', '')
FROM
  INFORMATION_SCHEMA.COLUMNS 
WHERE
  TABLE_NAME = 'Documentos'

Корпус переключателя

SELECT 'Declare @Doc' 
  + COLUMN_NAME + ' ' 
  + DATA_TYPE 
  + Case When CHARACTER_MAXIMUM_LENGTH Is Null Then '' Else '(' + Convert(Varchar, CHARACTER_MAXIMUM_LENGTH) + ')' End
FROM
  INFORMATION_SCHEMA.COLUMNS 
WHERE
  TABLE_NAME = 'Documentos'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...