[英]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.