SQL выводит содержимое таблицы в строку - PullRequest
7 голосов
/ 17 декабря 2009

У меня есть таблица, которая содержит много строк команд SQL, которые составляют одну инструкцию SQL (чему я благодарен за этот ответ, шаг 5 здесь )

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

Редактировать: оператор SQL в моей таблице состоит из 1 строки на каждую строку оператора, т.е.

Row1: SELECT * FROM myTable
Row2: WHERE
Row3: col = @value

Этот оператор, если скопирован в VARCHAR (MAX), превышает предел MAX.

Я с нетерпением жду ваших ответов. а пока попробую сам.

Спасибо

Ответы [ 3 ]

8 голосов
/ 17 декабря 2009

Вы можете использовать объединение, чтобы объединить содержимое столбца в строку, например,

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.

1 голос
/ 17 декабря 2009

Вы можете попробовать что-то вроде этого

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
0 голосов
/ 17 декабря 2009

, если вы хотите выполнить строку sql, используйте Exec () или sp_executeSql

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