2016-04-20 24 views
5

Dinamik SQL'i ilk kez kullanmaya çalışıyorum - Şimdi bir an için bunu anladım ancak Dinamik SQL kullanarak geçici bir tabloya bir parametre girmeyi deniyorum. Sütun adı "sadece bir sütun olması niyetinde olmayan metin olarak girmeyi denediğimde. Bir tarafta Dinamik SQL kullanarak Geçersiz Sütun Adı

beni ben SQL Server 2005

peşin Bu benim yürütme sorgu

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''' 

çok teşekkürler bu çalıştırıyorum söz değerini not edin.

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

u kullandığınız sürüm? Sonunda gayet iyi çalışıyor. – BNN

+0

Sadece şunu eklemeyi unutmayın - SQL Server 2005'i çalıştırıyorum maalesef, – user3482471

+0

soruyu güncelleyebilir, nereye ekleneceğini karıştırıyor. – BNN

cevap

5

dinamik bir dize olarak Değişkeninizi tedavi etmek SQL ve sen değil tek tırnak içinde kaydırmak gerekecek bir sütun adı isterseniz:

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

Merhaba George, Yorum için teşekkür ederim Ben bir adım daha yakın olabileceğini düşünüyorum. Ancak bunu kullanarak şimdi bu mesajı alıyorum. Msg 1038, Düzey 15, Durum 5, Satır 1 Bir nesne veya sütun adı eksik veya boş. SELECT INTO ifadeleri için, her sütunun bir adı olduğunu doğrulayın. Diğer ifadeler için boş takma adlara bakın. "" Veya [] olarak tanımlanan takma adlara izin verilmez. Diğer ad olarak bir ad veya tek boşluk ekleyin. – user3482471

+0

Bu sütunda bir takma ad sağlamak için yukarıdaki kod snippet'inde değişiklik yapılmıştır. –

+0

Merhaba George, Bunu kullandığımda çok fazla içeride olduğunu düşünüyorum. Komutumun geri kalanı içine koyduğunda (yani kırmızı renkte) – user3482471