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!!!
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 + '''')