Как создать переменные, которые заданы один раз, а затем использоваться в запросах позже в скрипте? Эти переменные могут использоваться несколько раз в запросе и в нескольких запросах в скрипте. Я использую @x
как такую переменную в приведенных ниже примерах.SQL добавить переменную в запрос
То, что я хочу сделать что-то вроде:
Declare @Query nvarchar(1000)
Declare @x nvarchar(40)
Set @x = 'test'
Set @Query = 'Select [Name]
, ' + @x + ' as [TestCase]
From mytable'
Exec (@Query)
-- returns "Invalid column name 'test'"
который возвращает ошибку упомянутую выше. Я хотел бы, чтобы достичь эквивалента:
Declare @Query nvarchar(1000)
Declare @x nvarchar(40)
Set @x = 'test'
Set @Query = 'Select [Name]
, ''test'' as [TestCase]
From mytable'
Exec (@Query)
-- Returns e.g.
-- Name TestCase
-- Alice Test
-- Bob Test
Я также отметить, что следующий не работает и возвращает ту же ошибку, что и первый:
Declare @Query nvarchar(1000)
Declare @x nvarchar(40)
Set @x = 'test'
Set @Query = 'Select [Name]
, ' + 'test' + ' as [TestCase]
From mytable'
Exec (@Query)
-- returns "Invalid column name 'test'"
Основываясь на ошибках и, так как я 'Не пытаюсь использовать @x
в качестве имени столбца, но как переменную, я предполагаю, что я использую недопустимую реализацию переменной.
О, отлично, спасибо! Это работало по желанию. – conor
Принял этот ответ, поскольку он отвечает на мой вопрос наиболее тщательно и упрощает его - на самом деле мне не нужен динамический SQL. – conor
Я рад, что это помогло. Чтобы ответить на вторую половину вопроса, вы можете попробовать «select @ query», чтобы увидеть, какой запрос состоит. Вы увидите 'select [Name], test as ...', который обрабатывает «test» как имя столбца. Вам нужно будет обернуть это в кавычки - как показывают другие ответы здесь. Но тогда вы вводите проблему «что произойдет, если' @ x' имеет в ней кавычки », демонстрируя опасность динамического SQL. Например, попробуйте 'set @x = 'test' ', Name, Name, Name,' 'hahaha'' с одним из ответов других ответов! –