Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Giúp em đoạn Query này

19:15 16-09-2018 550 lượt xem 1 bình luận 09:22 17-09-2018

Em dùng đoạn lệnh sau:

CREATE PROCEDURE [dbo].[TraCuuBoTieuChi_Head]
    @ChuoiLoai nvarchar(20),
    @ChuoiXa nvarchar(MAX),
    @ThangNam datetime
AS

DECLARE @strSQL nvarchar(MAX)
DECLARE @Str NVARCHAR(MAX)
DECLARE @Str2 NVARCHAR(MAX)
DECLARE @Str3 NVARCHAR(MAX)
DECLARE @Str4 NVARCHAR(MAX)
DECLARE @Str5 NVARCHAR(MAX)
DECLARE @Str6 NVARCHAR(MAX)

SET @Str = STUFF((SELECT ',' + (CASE WHEN items = 1 THEN 'SL_CuThe_Loai1 nvarchar(50)' WHEN items = 2 THEN 'SL_CuThe_Loai2 nvarchar(50)' ELSE 'SL_CuThe_Loai3 nvarchar(50)' END) FROM dbo.Split(@ChuoiLoai, ',') FOR XML PATH('')), 1, 1, '')
SET @Str2 = STUFF((SELECT ',' + (CASE WHEN items = 1 THEN 'SL_CuThe_Loai1' WHEN items = 2 THEN 'SL_CuThe_Loai2' ELSE 'SL_CuThe_Loai3' END) FROM dbo.Split(@ChuoiLoai, ',') FOR XML PATH('')), 1, 1, '')
SET @Str3 = STUFF((SELECT ',' + (CASE WHEN items = 1 THEN N'N''Giá trị mẫu 1''' WHEN items = 2 THEN N'N''Giá trị mẫu 2''' ELSE N'N''Giá trị mẫu 3''' END) FROM dbo.Split(@ChuoiLoai, ',') FOR XML PATH('')), 1, 1, '')
PRINT @Str3

SET @Str4 = STUFF((SELECT ',' + ('Xa' + items + ' nvarchar(100)') FROM dbo.Split(@ChuoiXa, ',') FOR XML PATH('')), 1, 1, '')
SET @Str5 = STUFF((SELECT ',' + ('Xa' + items ) FROM dbo.Split(@ChuoiXa, ',') FOR XML PATH('')), 1, 1, '')
SET @Str6 = STUFF((SELECT ',' + ((SELECT 'N''' + LocationName + '''' FROM Location WHERE LocationID = items)) FROM dbo.Split(@ChuoiXa, ',') FOR XML PATH('')), 1, 1, '')
PRINT @Str6

SET @strSQL = 'CREATE TABLE #tmp_paging_index (BulletCode nvarchar(30),TenTieuChi nvarchar(MAX),' + @Str  + ',' +  @Str4 + ')
INSERT INTO #tmp_paging_index (BulletCode,TenTieuChi,' + @Str2  + ',' +  @Str5 + ')
SELECT N''BulletCode'',N''Tên tiêu chí'',' + @Str3  + ',' +  @Str6 + '
SELECT * FROM #tmp_paging_index
DROP TABLE #tmp_paging_index'

PRINT @strSQL
EXEC sp_sqlexec @strSQL


 

Và kết quả khi chạy thủ tục nó như hình,

https://uphinhnhanh.com/image/3LUkmR

Đoạn Print thì ra kết quả như sau:

PRINT 1 :  N'Giá trị mẫu 1',N'Giá trị mẫu 2',N'Giá trị mẫu 3'
PRINT 2: N'Xã Phú Hải',N'Xã Quảng Trung ',N'Xã Quảng Phong '
PRINT 3: CREATE TABLE #tmp_paging_index (BulletCode nvarchar(30),TenTieuChi nvarchar(MAX),SL_CuThe_Loai1 nvarchar(50),SL_CuThe_Loai2 nvarchar(50),SL_CuThe_Loai3 nvarchar(50),Xa14 nvarchar(100),Xa15 nvarchar(100),Xa16 nvarchar(100))
INSERT INTO #tmp_paging_index (BulletCode,TenTieuChi,SL_CuThe_Loai1,SL_CuThe_Loai2,SL_CuThe_Loai3,Xa14,Xa15,Xa16)
SELECT N'BulletCode',N'Tên tiêu chí',N'Giá trị mẫu 1',N'Giá trị mẫu 2',N'Giá trị mẫu 3',N'Xã Phú Hải',N'Xã Quảng Trung ',N'Xã Quảng Phong '
SELECT * FROM #tmp_paging_index
DROP TABLE #tmp_paging_index

Em coppy đoạn Print chạy thì nó lại không bị lỗi ký tự.

https://uphinhnhanh.com/image/3LU7fU

Các cao thủ cho em biết em sai ở đâu với ạ.

Em cảm ơn!!!

 

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 09:22 17-09-2018

INSERT INTO #tmp_paging_index (BulletCode,TenTieuChi,' + @Str2  + ',' +  @Str5 + ')

chỗ này thiếu N ở trước

INSERT INTO #tmp_paging_index (BulletCode,TenTieuChi, N'' + @Str2  + '', N'' +  @Str5 + '''')

Câu hỏi mới nhất