我有一个包含多行SQL命令的表,这些SQL命令组成了一个SQL语句(我很感激这个答案,第5步here)
我已经按照这个答案中的示例进行操作,现在有一个SQL表 - 每一行都是一行构建查询的SQL。我可以将这个表的内容复制并粘贴到一个新的查询窗口并获得结果但是由于我缺乏SQL知识,我不知道如何将表的内容复制到一个字符串变量中然后我可以执行
编辑:我的表中的SQL语句包含每行语句1行,即
Row1: SELECT * FROM myTable
Row2: WHERE
Row3: col = @value
如果复制到VARCHAR(MAX)中,则该语句超出MAX限制。
我期待你的回复。同时我会尝试自己。
谢谢
答案 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