2012-06-16 33 views
17

Tôi đang sử dụng máy chủ SQL 2012, & luôn sử dụng SP_HELPTEXT để tạo thủ tục lưu trữ đã tạo trước đó của mình. Trong các phiên bản trước của máy chủ SQL không có vấn đề gì trong quá trình này. với dòng thêm, ví dụ đây là thủ tục mà tôi đã viếtMáy chủ SQL 2012 SP_HELPTEXT vấn đề thêm dòng

Create proc SP_Test 
as 
begin 
Select * 
from table_ABC 
end 

Bây giờ sau khi sử dụng SP_HELPTEXT với thủ tục này (hoặc bất kỳ thủ tục khác), tôi nhận được kết quả này

Create proc SP_Test 

as 

begin 

Select * 

from table_ABC 

end 

Có ai khác cũng phải đối mặt với vấn đề này hay tôi là người duy nhất trên hành tinh này đấu tranh với vấn đề này? Có cơ quan nào biết cách giải quyết vấn đề này không ??

Cấu hình của máy chủ SQL của tôi là như sau (sao chép từ Help -> About)

Microsoft SQL Server Management Studio   11.0.2100.60 
Microsoft Analysis Services Client Tools  11.0.2100.60 
Microsoft Data Access Components (MDAC)   6.1.7601.17514 
Microsoft MSXML      3.0 6.0 
Microsoft Internet Explorer    9.0.8112.16421 
Microsoft .NET Framework    4.0.30319.269 
Operating System     6.1.7601 

Thanx trước.

+0

Không thấy hành vi này ở đây (SQL Server Express 2012). –

+0

Tôi đã đề cập đến cấu hình Phiên bản của tôi ngay bây giờ, xin hãy xem nó quá – yogi

+0

Bạn có thể biết điều này, nhưng bạn có thể nhấp chuột phải vào một thủ tục đã lưu và 'Sửa đổi 'sẽ cung cấp cho bạn nguồn. Tính năng [SQL Search] miễn phí của RedGate (http://www.red-gate.com/products/sql-development/sql-search/) giúp bạn nhanh chóng chọn một thủ tục được lưu trữ. – Andomar

Trả lời

17

Tôi có thể sao chép hành vi này nếu tôi chạy sp_helptext với Results to grid đặt, sau đó sao chép và dán kết quả từ lưới vào truy vấn mới hoặc bất kỳ trình soạn thảo văn bản nào khác.

Điều này có vẻ là thay đổi trong hành vi của sp_helptext từ các ấn bản trước, vì hiệu ứng này không được hiển thị với bộ kết quả lưới tiêu chuẩn.

Cách đơn giản nhất công việc xung quanh sẽ chạy sp_helptext với Results to text bộ (Query -.>Results to>Results to text, shortcut CTRL + T

Bạn có thể cần phải tăng số lượng ký tự tối đa trên mỗi dòng trong Results to text để có được sản lượng bạn mong đợi - Tools>Options>Query Results>Results to text - đặt "số ký tự tối đa được hiển thị trong mỗi cột" thành giá trị tối đa là 8192.

+2

Vâng, kết quả là văn bản hoạt động tốt, thanx :) – yogi

5

karound (so với sử dụng kết quả để văn bản) theo ý kiến ​​của tôi là tạo ra một storedproc sp_helptext2 như đã giải thích ở đây:

http://sql-javier-villegas.blogspot.com/2012/08/a-workaround-for-sphelptext-bug-in-ssms.html

Lưu ý: giải pháp mà có một lỗi rời ra dòng cuối cùng nếu không có dòng sản phẩm mới tại kết thúc. Corrected T-SQL:

CREATE PROCEDURE [dbo].[sp_helptext2] (@ProcName NVARCHAR(256)) 
AS 
BEGIN 
    DECLARE @PROC_TABLE TABLE (X1 NVARCHAR(MAX)) 

    DECLARE @Proc NVARCHAR(MAX) 
    DECLARE @Procedure NVARCHAR(MAX) 
    DECLARE @ProcLines TABLE (PLID INT IDENTITY(1,1), Line NVARCHAR(MAX)) 

    SELECT @Procedure = 'SELECT DEFINITION FROM '+db_name()+'.SYS.SQL_MODULES WHERE OBJECT_ID = OBJECT_ID('''[email protected]+''')' 

    insert into @PROC_TABLE (X1) 
     exec (@Procedure) 

    SELECT @Proc=X1 from @PROC_TABLE 

    WHILE CHARINDEX(CHAR(13)+CHAR(10),@Proc) > 0 
    BEGIN 
     INSERT @ProcLines 
     SELECT LEFT(@Proc,CHARINDEX(CHAR(13)+CHAR(10),@Proc)-1) 
     SELECT @Proc = SUBSTRING(@Proc,CHARINDEX(CHAR(13)+CHAR(10),@Proc)+2,LEN(@Proc)) 
    END 
    --* inserts last line 
    insert @ProcLines 
    select @Proc ; 

    SELECT Line FROM @ProcLines ORDER BY PLID 
END 
+0

Xin lỗi @rufo .. Câu trả lời của bạn không hoạt động – Rama

+0

@Dram: xin lỗi - nó đã làm việc cho tôi trong nhiều năm. Tôi vừa mới ngừng sử dụng vì không cần thiết nếu bạn có SSMS 2014. – rufo

0

tôi đã viết một workaround mà chỉ thay thế CRLF:

DECLARE @results table ([Text] nvarchar(255)) 

INSERT @results 
Exec sp_helptext spStudyRoleCacheFlushNotificationGet 

SELECT REPLACE(REPLACE([Text], CHAR(10), ''), CHAR(13), '') 
FROM @results 
5

Câu trả lời đăng bởi Rufo vẫn sản xuất các dòng trống. Một chút thay đổi trong dòng mã cuối cùng đã giải quyết được vấn đề cho tôi. Dưới đây là mã đã chỉnh sửa:

CREATE PROCEDURE [dbo].[sp_helptext2] (@ProcName NVARCHAR(256)) 
AS 
BEGIN 
    DECLARE @PROC_TABLE TABLE (X1 NVARCHAR(MAX)) 

    DECLARE @Proc NVARCHAR(MAX) 
    DECLARE @Procedure NVARCHAR(MAX) 
    DECLARE @ProcLines TABLE (PLID INT IDENTITY(1,1), Line NVARCHAR(MAX)) 

    SELECT @Procedure = 'SELECT DEFINITION FROM '+db_name()+'.SYS.SQL_MODULES WHERE OBJECT_ID = OBJECT_ID('''[email protected]+''')' 

    insert into @PROC_TABLE (X1) 
     exec (@Procedure) 

    SELECT @Proc=X1 from @PROC_TABLE 

    WHILE CHARINDEX(CHAR(13)+CHAR(10),@Proc) > 0 
    BEGIN 
     INSERT @ProcLines 
     SELECT LEFT(@Proc,CHARINDEX(CHAR(13)+CHAR(10),@Proc)-1) 
     SELECT @Proc = SUBSTRING(@Proc,CHARINDEX(CHAR(13)+CHAR(10),@Proc)+2,LEN(@Proc)) 
    END 
--* inserts last line 
insert @ProcLines 
select @Proc ; 

--edited here. (where Line<>'') 
SELECT Line FROM @ProcLines where Line<>'' ORDER BY PLID 
END 

Mặc dù điều này loại bỏ "trả về vận chuyển gốc" nhưng cách này tốt hơn để sống. Tôi di chuyển bởi DB từ SQL 2008 đến SQL 2012 và tất cả các thủ tục được lưu trữ (hơn 200) đã được trả về với khoảng 5 lần trả về sau mỗi dòng mã khi sử dụng sp_helptext.

Mã trên đã giúp tôi giải quyết.

+0

Cảm ơn @Ish Goel vì mã. Nó đã giúp đỡ tôi – Ram

0

Tôi cũng phải đối mặt với vấn đề này cho chế độ xem.

Dưới đây là các bước tôi sử dụng để giải quyết vấn đề (chú ý chỉ một sửa chữa tạm thời)

1) chọn truy vấn

2) sau đó click chuột phải và mở trong thiết kế truy vấn

3) nhấp chuột ok

bạn sẽ thấy tất cả các khoảng trống thừa được xóa.

Lưu ý: thao tác này chỉ áp dụng cho các truy vấn đơn giản không phải cho các quy trình, v.v.

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