2016-04-20 36 views
5

Tôi đang cố gắng sử dụng SQL động lần đầu tiên - Bây giờ tôi hiểu ý chính của nó ở mức độ nào đó, tuy nhiên, cố gắng nhập tham số vào bảng tạm thời bằng cách sử dụng SQL động Tên cột "khi tôi chỉ đơn giản là cố gắng để nhập này như văn bản không có ý định trở thành một cột.Tên cột không hợp lệ sử dụng SQL động

Trên một mặt lưu ý giá trị của nó tôi nhắc tôi đang chạy trên SQL Server 2005.

Đây là truy vấn thực hiện của tôi

SELECT ARCHV_FLAG,PATNT_REFNO,ACTIVE_NAMES,AINPT_REFNO INTO #TEMP FROM ACTIVE_NAMES WHERE PATNT_REFNO = 1 AND ARCHV_FLAG = 'C' 

Fix SET @SQL = 'SELECT ARCHV_FLAG,PATNT_REFNO,'''[email protected] +''' AS  [ACTIVE_NAMES],'+ @PK + ' INTO #TEMP FROM ' + @TABLE + ' WHERE PATNT_REFNO = '+ CAST(@PATNT AS VARCHAR (100))+ ' AND ARCHV_FLAG = ''C''' 

Nhiều cảm ơn trước.

DECLARE 
    @SQL NVARCHAR(4000), 
    @SQL1 NVARCHAR(4000), 
    @TABLE VARCHAR (100), 
    @PK VARCHAR (50), 
    @PATNT INT 

SET @PATNT = 1 

CREATE TABLE #TEMP 
(
    ARCHV_FLAG VARCHAR (1), 
    PATNT_REFNO INT, 
    TABLE_NAME VARCHAR (100), 
    PRIMARY_KEY INT 
) 

CREATE TABLE #TABLE 
(NAME VARCHAR (100)) 

INSERT INTO #TABLE (NAME) VALUES ('ACTIVE_NAMES') 

SELECT * FROM #TABLE 

DECLARE Cur CURSOR FOR 
SELECT NAME FROM #TABLE 

OPEN Cur 

FETCH NEXT FROM Cur INTO @TABLE 
WHILE @@FETCH_STATUS = 0 
BEGIN 

SET @PK = (SELECT C.NAME FROM SYS.COLUMNS C 
     JOIN SYS.tables T ON C.object_id = T.object_id 
     WHERE T.name = @TABLE AND C.is_identity = 1) 

SET @SQL = 'SELECT ARCHV_FLAG,PATNT_REFNO,'[email protected] +','+ @PK + ' INTO #TEMP FROM ' + @TABLE + ' WHERE PATNT_REFNO = '+ CAST(@PATNT AS VARCHAR (100))+ ' AND ARCHV_FLAG = ''C''' 
EXEC SP_EXECUTESQL @SQL 

select @sql 

FETCH NEXT FROM Cur INTO @TABLE 
END 
CLOSE Cur 
DEALLOCATE Cur 

SELECT * FROM #TEMP 
DROP TABLE #TEMP 
DROP TABLE #TABLE 
+0

phiên bản nào là u sử dụng? nó hoạt động hoàn toàn tốt đẹp ở cuối của tôi. – BNN

+0

Chỉ cần nhớ để thêm rằng trong - Tôi đang chạy SQL Server 2005 tiếc là – user3482471

+0

u có thể cập nhật câu hỏi ur, gây nhầm lẫn của nó đến nơi để thêm. – BNN

Trả lời

5

Nếu bạn muốn SQL động để điều trị biến của bạn như là một chuỗi đen và không phải là một tên cột bạn sẽ phải quấn nó trong dấu ngoặc kép duy nhất:

SET @SQL = 'SELECT ARCHV_FLAG,PATNT_REFNO,'''[email protected] +''' AS [ACTIVE_NAMES],'+ @PK + ' INTO #TEMP FROM ' + @TABLE + ' WHERE PATNT_REFNO = '+ CAST(@PATNT AS VARCHAR (100))+ ' AND ARCHV_FLAG = ''C''' 
EXEC SP_EXECUTESQL @SQL 
+0

Hi George, Cảm ơn bạn đã bình luận tôi nghĩ rằng chúng tôi có thể là một bước gần hơn. Tuy nhiên bằng cách sử dụng này tôi bây giờ nhận được thông báo này. Msg 1038, Cấp 15, Tiểu bang 5, Dòng 1 Tên đối tượng hoặc cột bị thiếu hoặc trống. Đối với các câu lệnh SELECT INTO, xác minh mỗi cột có một tên. Đối với các câu lệnh khác, hãy tìm tên bí danh rỗng. Không cho phép các bí danh được xác định là "" hoặc []. Thêm tên hoặc không gian đơn lẻ làm tên bí danh. – user3482471

+0

Đã sửa đổi đoạn mã ở trên để cung cấp bí danh cho cột đó. –

+0

Hi George, Khi tôi sử dụng nó tôi nghĩ rằng nó có quá nhiều 'in. Như đặt phần còn lại của kịch bản của tôi bên trong nó (tức là màu đỏ) – user3482471

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