SQL将表的内容输出到字符串

时间:2009-12-17 13:00:56

标签: sql-server tsql

我有一个包含多行SQL命令的表,这些SQL命令组成了一个SQL语句(我很感激这个答案,第5步here

我已经按照这个答案中的示例进行操作,现在有一个SQL表 - 每一行都是一行构建查询的SQL。我可以将这个表的内容复制并粘贴到一个新的查询窗口并获得结果但是由于我缺乏SQL知识,我不知道如何将表的内容复制到一个字符串变量中然后我可以执行

编辑:我的表中的SQL语句包含每行语句1行,即

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

如果复制到VARCHAR(MAX)中,则该语句超出MAX限制。

我期待你的回复。同时我会尝试自己。

谢谢

3 个答案:

答案 0 :(得分:8)

您可以使用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执行字符串的内容。

答案 1 :(得分:1)

您可以尝试这样的事情

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

答案 2 :(得分:0)

如果要执行sql字符串,请使用Exec()或sp_executeSql