Проблема с SQL, когда мое имя таблицы является полной таблицей, когда я преобразую ее или преобразую в строку - PullRequest
1 голос
/ 05 июня 2011

Итак, у меня проблема с преобразованием строк. Я попробовал все под солнцем. Моя цель - включить значения из цикла в таблицу. Однако я могу получить значение поля, но не могу получить значение имени таблицы, потому что sql думает, что я вызываю таблицу, а не строку. Я пробовал кастинг, преобразовывая все. Вот пример кода:

DECLARE @C varchar(65)
DECLARE @FieldName varchar(50)
SET @FieldName = 'ProjectID'
SELECT @C = MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'Base Table'

CREATE TABLE #temp_t (
    [field] varchar(100),
    [tblname] varchar(100)
    )

WHILE @C is not null
    BEGIN
        DECLARE @qbExists int
        DECLARE @tblname varchar(100)
        SET @tblname = CONVERT(varchar(100), @C)
        SELECT @qbExists = COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @C AND COLUMN_NAME = @FieldName
        IF @qbExists = 1 AND 
           @C <> 'TimeExpenseUnionQuery' AND 
           @C <> 'TimeExpense' AND
           @C <> 'BC_BA' AND
           @C <> 'BC_BE' AND
           @C <> 'BC_EL' AND
           @C <> 'BC_TE'
          BEGIN
            EXEC('
                  SELECT ' + @FieldName + ', ' + @C + ' FROM ' + @tblName +'
                 ')
          END

        SELECT @C = MIN( TABLE_NAME ) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME > @C
END

SELECT * FROM #temp_t 

DROP TABLE #temp_t

Дочерняя часть проблемы находится в SELECT '+ @FieldName +', '+ @C +' FROM '+ @tblName. Теперь, если я не использую @C, он работает нормально. Если я пытаюсь конвертировать или CAST @C, я получаю неверное имя столбца? Что дает?

Ответы [ 3 ]

3 голосов
/ 05 июня 2011

Вы должны заключить его в кавычки, чтобы сделать его постоянным, что требует удвоения из-за динамического SQL

EXEC('
              SELECT ' + @FieldName + ', ''' + @C + ''' FROM ' + @tblName +'
             ')

Является ли использование динамического SQL хорошей идеей или нет, это другое дело ...

2 голосов
/ 05 июня 2011

Одна вещь, которая всегда является хорошей идеей при разработке динамических SQL-решений, как вы делаете здесь, - это сначала распечатать оператор и убедиться, что он выглядит так, как вы этого хотите. Я думаю, что другие ответчики имеют суть этого: кажется, что вы пытаетесь распечатать строковый литерал вашего имени таблицы. Если это так, вам нужно заключить его в кавычки в выполняемом запросе, что означает некоторую работу при создании запроса.

1 голос
/ 05 июня 2011

Похоже, вы пытаетесь выполнить:

SELECT <fieldname>, <tablename> FROM <same tablename>

, например

SELECT ProjectID, myTable FROM myTable

Вы хотите поместить имя таблицы в кавычки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...