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