1.什麼時候用+號?
---- 為了組成一個字串類型的語句,要用+號作串連符。 一般情況下,字串與字串變數串連時才用加號。
如:DECLARE @SQL NVARCHAR(1000),@tablename nvarchar(100),@SORTFIELD NVARCHAR(100)SELECT @TABLENAME=N'MYTABLE',@SORTFIELD=N'USERCODE'SET @SQL=N'SELECT * from '+@tablename+N' order by '+@FIELDSORT '這樣的組成的SQL語句是:SELECT * from MYTABLE order by USERCODE 2.什麼時候用引號:
----常數字串都要用引號,如上面例子的N'SELECT * FROM '3.什麼時候用空格:----一般串連關鍵字的引號內側要加一空格,如:N'SELECT * from '+@tablename
FROM 後面要加空格,否則串連後會成為:SELECT * FROMMYTABLE,FROM 和MYTABLE連起來了,從而出錯。
4.其它要注意的:---產生後字串中有引號的語句。
比如要產生這樣一個語句:SELECT * FROM MYTABLE WHERE USERCODE=''這樣寫是不對的:SET @SQL=N'SELECT * from '+@tablename+' WHERE USERCODE='' '這樣才是對的:SET @SQL=N'SELECT * from '+@tablename+' WHERE USERCODE=N'''' '可以看出:在字串中間的兩個引號變成了4個。總結一下:語句中間需要顯示出的引號,引號個數要加倍!
----------樣本如下:
CREATE PROCEDURE [dbo].[PROC_M_B3_LQ]<br />@F_GSIDCHAR(10),<br />@F_ZZRQINT,<br /> @TABLENAME VARCHAR(40),--計算資料表名<br /> @FIELDNAME VARCHAR(20), --欄位資料<br /> @TYPE INT, --類型:0-季度;1-年度(過去12個月)<br /> @VALUES MONEY OUTPUT--輸出計算結果<br />AS<br />BEGIN<br />SET NOCOUNT ON;<br />DECLARE<br />@SQL VARCHAR(2000) ------動態SQL產生快取資料</p><p>IF EXISTS(SELECT * FROM tedb.dbo.sysobjects WHERE [name]='##B3' and type='U') drop table ##B3<br />CREATE TABLE ##B3 (F_GSID CHAR(10),F_ZZRQ INT,F_VALUES MONEY,<br />CONSTRAINT [PK_##B3_1] PRIMARY KEY CLUSTERED<br />(<br />F_GSID ASC,<br />F_ZZRQ ASC<br />)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]<br />) ON [PRIMARY]</p><p>SET @SQL='INSERT INTO ##B1T03(F_GSID,F_ZZRQ,F_VALUES)<br />SELECT F_GSID,dbo.fn_datetoint(F_ZZRQ),(SELECT TOP(1) '+@FIELDNAME+' FROM '+@TABLENAME+' WHERE F_GSID=M.F_GSID AND dbo.fn_datetoint(F_ZZRQ)=dbo.fn_datetoint(M.F_ZZRQ) AND F_BBFL=''C'' ) FROM '+@TABLENAME+' AS M WHERE F_GSID='''+@F_GSID+''' AND F_BBFL=''C'''<br />EXEC (@SQL)<br />.<br />.<br />.