繁体   English   中英

动态SQL,空变量,格式问题?

[英]Dynamic SQL, Empty Variable, Formatting Issue?

我正在使用动态SQL建立一些语句。 这是存储的proc UpdateFOO的截断示例。 当我调试此存储过程时,问题是我声明的@SQL变量始终保持为空! 它应该填充查询。 我怀疑这与我格式化的方式有关,但是我不能发现它是否存在严重的格式化错误。

CREATE PROC [dbo].[UpdateFOO] 
@TEST1 uniqueidentifier,
@TEST2 nvarchar(40),
@TEST3 nvarchar(50),
@TEST4 char(1),
@TEST5 nvarchar(20),
@TEST6 nvarchar(40),
@LINKED_SERVER_NAME nvarchar(max),
@DATABASE_NAME nvarchar(max)
AS 
    SET NOCOUNT ON 
    SET XACT_ABORT ON  


    BEGIN TRAN
    DECLARE @SQL nvarchar(max)
    SELECT @SQL = 'UPDATE [' + @LINKED_SERVER_NAME + '].[' + @DATABASE_NAME + '].[dbo].[SOME_TABLE]
     SET [TEST1]=' + '''' + convert(nvarchar(36), @TEST1) + '''' +', 
     [TEST2]=' + '''' +@TEST2 + '''' +',
     [TEST3]=' + '''' + @TEST3 + '''' +',
     [TEST4]='+ '''' + @TEST4 + '''' +',
     [TEST5]=' + '''' + @TEST5 + '''' +',
     [TEST6]=' + '''' + @TEST6 + '''' +
     ' WHERE [TEST1] =' + '''' + convert(nvarchar(36), TEST1 )+ '''' +
     + 'SELECT [TEST1] FROM 
     [' + @LINKED_SERVER_NAME + '].[' + @DATABASE_NAME + '].[Rev].[SOME_TABLE] 
     WHERE [TEST1] =' + '''' + convert(nvarchar(36), TEST1 )+ '''' +''
     PRINT LEN(@SQL)
    EXEC (@SQL)
    COMMIT

TIA专家!

这是使用ISNULL的方法。 如果第一个值为空,则将返回第二个值。

SELECT @SQL = 'UPDATE [' + @LINKED_SERVER_NAME + '].[' + @DATABASE_NAME + '].[dbo].[SOME_TABLE]
     SET [TEST1]=' + '''' + convert(nvarchar(36), ISNULL(@TEST1, '')) + '''' +', 
     [TEST2]=' + '''' +ISNULL(@TEST2, '') + '''' +',
     [TEST3]=' + '''' + ISNULL(@TEST3, '') + '''' +',

...

等等...

您应该使用参数化查询。 这是一个例子:

DECLARE @sql nvarchar(max), @paramlist nvarchar(max)

SELECT @sql= 'UPDATE Table
              SET Col1 = @Value1,
                  Col2 = @Value2
              WHERE (1 = 1)'

SELECT @paramlist = '@Value1 nvarchar (256), @Value2 nvarchar (256)'
EXEC sp_executesql @sql, @paramlist, @Value1, @Value2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM