SQL выводит содержимое таблицы в строку
У меня есть таблица, содержащая много строк команд SQL, которые составляют один оператор SQL (к которому я благодарен за этот ответ, Шаг 5 здесь)
я следовал примеру в этом ответе и теперь имею таблицу SQL - каждая строка является строкой SQL, которая строит запрос. Я могу скопировать и вставить содержимое этой таблицы в новое окно запроса и получить результаты, однако из-за моего отсутствия знаний SQL я не уверен, как я собираюсь копировать содержимое таблица в строковую переменную, которую я могу затем выполнить.
Edit: оператор SQL в моей таблице состоит из 1 строки на каждую строку оператора, т. е.
Row1: SELECT * FROM myTable
Row2: WHERE
Row3: col = @value
этот оператор, если скопирован в VARCHAR (MAX), превышает максимальный предел.
Я с нетерпением жду ваших ответов. а пока я попробую сам.
спасибо
3 ответов
вы можете использовать coalesce для объединения содержимого столбца в строку, например,
create table foo (sql varchar (max));
insert foo (sql) values ('select name from sys.objects')
insert foo (sql) values ('select name from sys.indexes')
declare @sql_output varchar (max)
set @sql_output = '' -- NULL + '' = NULL, so we need to have a seed
select @sql_output = -- string to avoid losing the first line.
coalesce (@sql_output + sql + char (10), '')
from foo
print @sql_output
Примечание: непроверенный, только с верхней части моей головы, но рабочий пример этого должен произвести следующий результат:
select name from sys.objects
select name from sys.indexes
затем вы можете выполнить содержимое строку с exec (@sql_output)
или sp_executesql
.
Вы можете попробовать что-то вроде этого
DECLARE @TABLE TABLE(
SqlString VARCHAR(MAX)
)
INSERT INTO @TABLE (SqlString) SELECT 'SELECT 1'
DECLARE @SqlString VARCHAR(MAX)
SELECT TOP 1 @SqlString = SqlString FROM @TABLE
EXEC (@SqlString)
объединить строку из нескольких строк
DECLARE @Table TABLE(
ID INT,
Val VARCHAR(50)
)
INSERT INTO @Table (ID,Val) SELECT 1, 'SELECT *'
INSERT INTO @Table (ID,Val) SELECT 2, 'FROM YourTable'
INSERT INTO @Table (ID,Val) SELECT 3, 'WHERE 1 = 1'
DECLARE @SqlString VARCHAR(MAX)
--Concat
SELECT DISTINCT
@SqlString =
(
SELECT tIn.Val + ' '
FROM @Table tIn
ORDER BY ID
FOR XML PATH('')
)
FROM @Table t
PRINT @SqlString
Если вы хотите выполнить строку sql, используйте Exec() или процедуры sp_executesql