2009-12-17 30 views
6

Tôi có một bảng có chứa nhiều hàng lệnh SQL tạo nên một câu lệnh SQL (mà tôi biết ơn cho câu trả lời này, bước 5 here)nội dung SQL Output của một bảng để chuỗi

tôi đã theo ví dụ trong câu trả lời này và bây giờ có một bảng SQL - mỗi hàng là một dòng của SQL xây dựng một truy vấn. Tôi có thể sao chép và dán nội dung của bảng này vào cửa sổ truy vấn mới và nhận kết quả tuy nhiên do thiếu kiến ​​thức SQL, tôi không chắc chắn cách tôi sao chép nội dung của bảng thành biến chuỗi mà sau đó tôi có thể thực thi .

Edit: Các câu lệnh SQL trong bảng của tôi bao gồm 1 hàng cho mỗi dòng lệnh ví dụ:

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

Tuyên bố này nếu sao chép vào một VARCHAR (MAX) vượt quá giới hạn MAX.

Tôi mong được trả lời của bạn. trong lúc đó tôi sẽ cố gắng.

Cảm ơn bạn

Trả lời

9

Bạn có thể sử dụng kết hợp để con catenate nội dung của một cột thành một chuỗi, ví dụ:

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 

Lưu ý: chưa được kiểm tra, chỉ cần ra khỏi đỉnh đầu của tôi, nhưng một ví dụ làm việc của điều này sẽ cho kết quả sau:

select name from sys.objects 
select name from sys.indexes 

Sau đó, bạn có thể thực hiện các nội dung của chuỗi với exec (@sql_output) hoặc sp_executesql.

+0

thats goodm, cảm ơn. Vấn đề duy nhất tôi có là bảng của tôi có chứa nhiều câu lệnh hơn varchar (max) có thể xử lý.Whats khác datatype thích hợp tôi có thể sử dụng. Tôi đang sử dụng SQL Server 2008 nếu điều này giúp. – Belliez

1

Bạn có thể thử một cái gì đó giống như

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) 

CONCATENATE chuỗi này từ nhiều hàng

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

bảng Tôi chuyển đổi thành một chuỗi lớn hơn VARCHAR (MAX)? Bạn có thể giới thiệu một kiểu dữ liệu thích hợp không. Bảng chứa khoảng 400 hàng. Cảm ơn, đây gần như là những gì tôi đang tìm kiếm. – Belliez

+0

Hãy xem tại đây teratrax.com/articles/varchar_max.html. Nó nói * Những kiểu dữ liệu có thể chứa cùng một lượng dữ liệu BLOB có thể giữ (2 GB) * –

+0

thú vị, truy vấn sql của tôi chắc chắn không vượt qua 2GB !! Tôi đang sử dụng VARCHAR (MAX) theo tuyên bố của bạn ở trên. – Belliez

0

nếu bạn muốn thực hiện một chuỗi các sql sau đó sử dụng Exec() hoặc sp_executeSql

Các vấn đề liên quan